SendMessage WM_LBUTTONDOWN / UP适用于按钮但不适用于窗口

时间:2010-08-09 19:07:16

标签: windows mfc sendmessage

我正在尝试使用SendMessage向Windows Calculator发送一些简单的鼠标向下/向上消息。我已经能够通过直接向按钮发送消息来按下按钮。但是,我无法将相同的消息成功发送到主计算器窗口句柄。鉴于hWnd是计算器的窗口句柄,这是我的代码。

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”键的位置不起作用?我想最终使用此代码来模拟没有像计算器这样的按钮的其他应用程序的鼠标点击。

1 个答案:

答案 0 :(得分:0)

我不确定我是否跟着你。您是否尝试将WM_LBUTTONDOWN发送到主窗口,其坐标为5按钮的位置,希望5按钮被“点击”?如果是这样,那就不行了。 WM_LBUTTONDOWN只发送到鼠标光标下的窗口。从理论上讲,主窗口可以处理WM_LBUTTONDOWN并查看它的任何子窗口是否位于该位置,但是没有人这样做,因为WM_LBUTTONDOWN不是如何工作的。