【问题标题】:SendMessage ButtonUp/Down to handle x/y coordinatesSendMessage ButtonUp/Down 处理 x/y 坐标
【发布时间】:2015-06-11 19:34:22
【问题描述】:

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

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

 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);
...

现在的问题是,我如何指定我希望它发送点击的点或 xy 坐标?文档中提到了一些关于 LParam 取点的内容,但没有提供任何示例。

感谢您的帮助。

【问题讨论】:

    标签: c# .net handle sendmessage


    【解决方案1】:

    发件人:

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

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

    l参数

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

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

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

    public static LPARAM BuildLParam(ushort low, ushort high)
    {
        return (LPARAM)(((uint)high << 16) | (uint)low);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 2013-05-05
      • 2022-01-16
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多