c# - SendMessage ButtonUpDown处理xy坐标

c# - SendMessage ButtonUpDown处理xy坐标,第1张

我正在扩展我为“clicker”浏览器游戏(点击器英雄,糖果点击器等)制作的小型机器人。

最初,我发送了这样的点击:

 var screenPoint = Cursor.Position;
 var handle = WindowFromPoint(screenPoint);
 if (handle != IntPtr.Zero)
 {
     SendMessage(handle, Win32.WM_RBUTTONDOWN, IntPtr.Zero, IntPtr.Zero);
     SendMessage(handle, Win32.WM_RBUTTONUP, IntPtr.Zero, IntPtr.Zero);              
 }

但这显然导致窗口问题需要在前面。

我希望能够向窗口句柄本身发送点击,因此我得到了这样的句柄:

winHandle = Win32.FindWindow("PlayerClient", "Clicker Heroes");
SendMessage(winHandle , Win32.WM_RBUTTONDOWN, IntPtr.Zero, IntPtr.Zero);
...

现在的问题是,如何指定我希望它发送点击的Point或xy坐标?该文档提到了关于LParam采取一个点的事情,但没有提供任何例子。

感谢您的帮助。

最佳答案:

1 个答案:

答案 0 :(得分:1)

自:

  • https://msdn.microsoft.com/en-us/library/windows/desktop/ms646242(v=vs.85).aspx
  • https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx

您需要通过SendMessage参数将坐标传递给lParam

LRESULT CALLBACK SendMessage(
  _In_ HWND   hwnd,
  _In_ UINT   uMsg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);
  

lParam的

     

低位字指定光标的x坐标。坐标相对于客户区的左上角。

     

高位字指定光标的y坐标。坐标相对于客户区的左上角。

如果你想要一个帮助函数来构建LPARAM我建议从以下32位程序开始:

public static LPARAM BuildLParam(ushort low, ushort high)
{
    return (LPARAM)(((uint)high << 16) | (uint)low);
}
本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复