2010-08-09 173 views
0

我正嘗試使用SendMessage向Windows計算器發送一些簡單的鼠標向下/向上消息。我可以通過直接將消息發送到按鈕來按下按鈕。但是,我無法成功將相同的消息發送到主計算器窗口句柄。鑑於hWnd是計算器的窗口句柄,這是我的代碼。SendMessage WM_LBUTTONDOWN/UP在按鈕上工作,但不是窗口

IntPtr fiveKey = FindWindowEx(hWnd, IntPtr.Zero, "Button", "5"); 

int x = 5; // X coordinate of the click 
int y = 5; // Y coordinate of the click 

IntPtr lParam = (IntPtr)((y << 16) | x); // The coordinates 
IntPtr wParam = IntPtr.Zero; // Additional parameters for the click (e.g. Ctrl) 
const uint downCode = 0x201; // Left click down code 
const uint upCode = 0x202; // Left click up code 
SendMessage(fiveKey, downCode, wParam, lParam); // Mouse button down 
SendMessage(fiveKey, upCode, wParam, lParam); // Mouse button up 
爲什麼發送消息的hWnd,而不是fiveKey與x/y偏移更改爲「5」鍵不起作用的位置

任何人都可以解釋一下嗎?我想最終使用此代碼來模擬鼠標點擊不具有計算器等按鈕的不同應用程序。

回答

0

我不知道我關注你。你是否試圖將WM_LBUTTONDOWN發送到主窗口,其座標是5按鈕的位置,希望5按鈕會被「點擊」?如果是這樣,那只是不起作用。只有WM_LBUTTONDOWN被髮送到鼠標光標下的窗口。理論上,主窗口可以處理WM_LBUTTONDOWN並查看它的任何子窗口是否位於該位置,但沒有人這樣做,因爲這不是WM_LBUTTONDOWN設計的工作方式。

+0

好的,這是有道理的。我希望它能將消息傳遞給該地點的孩子,但如果不是的話,我將不得不尋找另一種方式來完成這項任務。 – 2010-08-09 20:14:42