【问题标题】:Get mouse click coordinates in a minimized window在最小化窗口中获取鼠标点击坐标
【发布时间】:2019-12-02 16:26:13
【问题描述】:

我正在尝试在最小化窗口中自动单击鼠标。

由于我的屏幕/桌面坐标与进程/窗口坐标不同,我遇到了问题。

这是我正在测试的代码:

Function MakeDWord(LoWord As Integer, HiWord As Integer) As Long
    Return New IntPtr((HiWord << 16) Or (LoWord And &HFFFF))
End Function

SendMessage(_targetProcess.MainWindowHandle, WM_LBUTTONDOWN, 0&, MakeDWord(x, y))
SendMessage(_targetProcess.MainWindowHandle, WM_LBUTTONUP, 0&, MakeDWord(x, y))

代码正在运行,它将鼠标点击发送到所需的窗口,但不是正确的坐标。

所以,我需要找到我想要点击的窗口区域的相对坐标,而不是桌面/屏幕坐标。

有什么方法可以检测发送到进程/窗口的事件以获取相对坐标?

例如,在 Visual Studio 中有一个名为 spy++ 的工具可以工作,但现在我不会将点击发送到我自己的应用程序。

【问题讨论】:

    标签: vb.net process automation window


    【解决方案1】:

    ScreenToClient 函数解决了这个问题:

    https://pinvoke.net/default.aspx/user32/ScreenToClient.html

    RECT rct;
    POINT topLeft;
    POINT bottomRight;
    
    /** Getting a windows position **/
    GetWindowRect(hWnd, out rct);
    
    /** assign RECT coods to POINT **/
    topLeft.X = rct.Left;
    topLeft.Y = rct.Top;
    bottomRight.X = rct.Right;
    bottomRight.Y = rct.Bottom;
    
    /** this takes the POINT, which is using screen coords (0,0 in top left screen) and converts them into coords inside specified window (0,0 from  top left of hWnd) **/
    ScreenToClient(hWnd, ref topLeft);
    ScreenToClient(hWnd, ref bottomRight);
    
    int width = bottomRight.X - topLeft.X;
    int height = bottomRight.Y - topLeft.Y;
    
    Rectangle R = new Rectangle(topLeft.X, topLeft.Y, width, height);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      相关资源
      最近更新 更多