od dłuższego czasu próbuje znaleźć sposób na za symulowanie wciśnięcia przycisku myszy na oknie bez focusa, dla klawiatury wszystko działa pięknie.
kod który używam:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "PostMessage", CallingConvention = CallingConvention.Winapi)]
public static extern bool PostMessage(IntPtr hWnd, int msg, uint wParam, uint lParam);
const int WM_LBUTTONDOWN = 0x201;
const int WM_LBUTTONUP = 0x202;
public void Click(int x, int y)
{
IntPtr hWnd = FindWindow(null, "Title");
PostMessage(hWnd, WM_LBUTTONDOWN, 1, MakeDWORD(x, y));
PostMessage(hWnd, WM_LBUTTONUP, 1, MakeDWORD(x, y));
}
private static int MakeLParam(int LoWord, int HiWord)
{
return HiWord * 65536 + LoWord;
}
a podczas wywołania go nic się nie dzieje, tutaj log z spy++:
<00024> 000E0394 P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:111 yPos:111
<00025> 000E0394 P WM_LBUTTONUP fwKeys:MK_LBUTTON xPos:111 yPos:111
a tutaj log podczas zwykłego kliknięcia w okno (tylko mouse events):
<00007> 000E0394 S WM_MOUSEACTIVATE hwndTopLevel:000E0394 nHittest:HTCLIENT uMsg:WM_LBUTTONDOWN
<00008> 000E0394 R WM_MOUSEACTIVATE fuActivate:MA_ACTIVATE
<00009> 000E0394 S WM_SETCURSOR hwnd:000E0394 nHittest:HTCLIENT wMouseMsg:WM_LBUTTONDOWN
<00010> 000E0394 R WM_SETCURSOR fHaltProcessing:False
<00011> 000E0394 P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:512 yPos:518
<00012> 000E0394 S WM_SETCURSOR hwnd:000E0394 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00013> 000E0394 R WM_SETCURSOR fHaltProcessing:False
<00014> 000E0394 P WM_MOUSEMOVE fwKeys:MK_LBUTTON xPos:512 yPos:518
<00015> 000E0394 S WM_SETCURSOR hwnd:000E0394 nHittest:HTCLIENT wMouseMsg:WM_LBUTTONUP
<00016> 000E0394 R WM_SETCURSOR fHaltProcessing:False
<00017> 000E0394 P WM_LBUTTONUP fwKeys:0000 xPos:512 yPos:518
dodam że pracuje na win 7.