繁体   English   中英

给定按钮窗口的手柄,如何模拟按钮单击?

[英]How can I simulate a button click given the handle to the button's window?

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

我有那个窗口的句柄。 这是一个中止/重试/忽略窗口。

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

BM_CLICK消息发送到按钮的HWND:

SendMessage(hButton, BM_CLICK, 0, 0);

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

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

SendMessage(hButton, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0, 0));
SendMessage(hButton, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0));
SendMessage(hParent, WM_COMMAND, MAKEWPARAM(IdOfButton, BN_CLICKED), (LPARAM)hwndOfButton);

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

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

试试这个OK:

SendMessage(hWnd, WM_COMMAND, 1, NULL);

这是一个完整的功能:

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));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM