我正在尋找一種方法來將鼠標點擊發送到Windows上的後臺應用程序(即通過句柄),我用來確認我的代碼的測試窗口正在接受並處理點擊,但我的目標應用程序不雖然Spy ++顯示消息)。什麼會導致PostMessage發送的鼠標點擊被忽略?
這可能是什麼原因造成的?有沒有解決辦法?
這裏是我使用的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和其他人無法解決問題。
謝謝
你怎麼知道,如果你看到經歷的信息它不工作?可能是因爲你的位置是錯誤的,它得到它但沒有做任何事情,因爲它是它的區域外的點擊 –
要使用HWND將屏幕座標(即'Cursor.Position')轉換爲客戶端座標,請使用http://msdn.microsoft .com/en-us/library/dd162952(v = vs.85).aspx –
您的pinvoke聲明是錯誤的。使用pinvoke.net找到正確的。 –