14

我想模拟单击位于对话框中的按钮。

我有那个窗口的把手。这是一个中止/重试/忽略类型的窗口。

我不想模拟具有 X 和 Y 坐标的点击,因为它不适合我的需要。

4

5 回答 5

19

BM_CLICK向按钮的 HWND发送消息:

SendMessage(hButton, BM_CLICK, 0, 0);

这会导致按钮接收WM_LBUTTONDOWNWM_LBUTTONUP消息,并且父级会收到BN_CLICKED通知,就好像用户实际点击了按钮一样。

于 2013-04-30T23:34:15.037 回答
13

找到您要单击的按钮的句柄(使用FindWindowEx),然后发送单击消息:

SendMessage(hButton, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0, 0));
SendMessage(hButton, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0));
于 2013-04-30T08:49:58.263 回答
11
SendMessage(hParent, WM_COMMAND, MAKEWPARAM(IdOfButton, BN_CLICKED), (LPARAM)hwndOfButton);

通常,如果您不知道,您可以在没有 的情况下逃脱hwndOfButton- 取决于对话框的实现!

它可以是SendMessagePostMessage,具体取决于您的用例。

于 2013-04-30T09:02:59.487 回答
3

试试这个就OK了:

SendMessage(hWnd, WM_COMMAND, 1, NULL);
于 2013-04-30T08:48:31.610 回答
1

这是一个完整的功能:

void clickControl(HWND hWnd, int x, int y)
{
    POINT p;
    p.x = x; p.y = y;
    ClientToScreen(hWnd, &p);
    SetCursorPos(p.x, p.y);
    PostMessage(hWnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y));
    PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
    PostMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(x, y));
}
于 2016-10-19T14:03:02.340 回答