Windows のバックグラウンド アプリケーションにマウス クリックを送信する方法を探していました (つまり、ハンドルによって)。コードが機能していることを確認するために使用したテスト ウィンドウは、クリックを受け入れて処理しますが、ターゲット アプリケーションはそうしません (Spy++ にもかかわらず)。メッセージを表示します)。
何が原因でしょうか? そして、回避策はありますか?
これが私が使用しているC#コードです。
public enum WMessages : int
{
WM_LBUTTONDOWN = 0x201,
WM_LBUTTONUP = 0x202,
WM_KEYDOWN = 0x100,
WM_KEYUP = 0x101,
WH_KEYBOARD_LL = 13,
WH_MOUSE_LL = 14,
}
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
private static extern int PostMessage(HandleRef hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
public void SendClick(WMessages type, Point pos)
{
switch(type)
{
case WMessages.WM_LBUTTONDOWN:
PostMessage(new HandleRef(null, this.process.MainWindowHandle),
(UInt32)WMessages.WM_LBUTTONDOWN, (IntPtr)0x1,
(IntPtr)((pos.Y << 16) | (pos.X & 0xFFFF)));
return;
case WMessages.WM_LBUTTONUP:
PostMessage(new HandleRef(null, this.process.MainWindowHandle),
(UInt32)WMessages.WM_LBUTTONDOWN, (IntPtr)0x1,
(IntPtr)((pos.Y << 16) | (pos.X & 0xFFFF)));
return;
default:
return;
}
}
SendClick(WMessages.WM_LBUTTONDOWN, Cursor.Position);
SendClick(WMessages,WM_LBUTTONUP, Cursor.Position);
これを達成することは可能ですか?これを達成するためのより良い方法はありますか?
注: 上記のコードは、アプリケーションがアクティブで、マウスが正しい位置に置かれている場合にも機能しません。また、特にバックグラウンド アプリケーションに入力を送信することも検討しているため、SendInput などは問題外です。
ありがとう