2

解决了如何使用低级挂钩沿监视器边界的任意位置获取鼠标单击位置后,我收到一个 XY 坐标,该坐标通常包含一个值x: -1680 to +1920y: 0 to 1200在我的 pcs 案例中和之间。够简单!

现在的问题是我现在想计算鼠标相对于我所拥有的给定窗口的位置,因此我使用GetForegroundWindow()GetWindowRect(HandleRef hWnd, out RECT lpRect)获取我的活动窗口坐标。

我被卡住的地方是我需要当前的活动桌面(通过活动我的意思是点击发生在哪个监视器上)来计算我的鼠标点击相对于窗口的坐标。

不幸的是,我找不到类似GetActiveMonitor()或类似的 API 调用,所以希望有人能指出我正确的方向?

4

2 回答 2

1

我的猜测是,你可以通过使用 if 来知道你的鼠标在哪里:

if(mousePosition.X > -1680 && mousePosition.X < 0)
      //We are in monitor 1;
else
      //Monitor 2;
于 2012-08-25T14:38:52.103 回答
1
[DllImport("user32.dll", SetLastError = true)]
 [return: MarshalAs(UnmanagedType.Bool)]
 static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
 [StructLayout(LayoutKind.Sequential)]
 private struct RECT
 {
     public int Left;
     public int Top;
     public int Right;
     public int Bottom;
  }
Call it as:

  RECT rct = new RECT();
  GetWindowRect(hWnd, ref rct);

像这样获得鼠标位置后

int mouserelativepositionX = mousePosition.X - rct.Left;
int mouserelativepositionY = mousePosition.Y - rct.Top;
于 2012-08-25T14:49:53.137 回答