2

低レベルのフックを使用して、モニターの境界に沿った任意の場所でマウスのクリック位置を取得する方法を理解した後、通常はpcsの場合x: -1680 to +1920との間の値を含むXY座標を受け取ります。y: 0 to 1200簡単です!

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 に答える