我想模拟点击对话框中的按钮。
我有那个窗口的句柄。这是一个中止/重试/忽略窗口。
我不想模拟具有X和Y坐标的点击,因为它不符合我的需要。
答案 0 :(得分:14)
向按钮的HWND发送BM_CLICK
消息:
SendMessage(hButton, BM_CLICK, 0, 0);
这会导致按钮收到WM_LBUTTONDOWN
和WM_LBUTTONUP
条消息,并且父级会收到BN_CLICKED
通知,就像用户实际点击按钮一样。
答案 1 :(得分:9)
找到要点击的按钮的句柄(使用FindWindowEx
),然后发送点击消息:
SendMessage(hButton, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0, 0));
SendMessage(hButton, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0));
答案 2 :(得分:5)
SendMessage(hParent, WM_COMMAND, MAKEWPARAM(IdOfButton, BN_CLICKED), (LPARAM)hwndOfButton);
通常,如果你不知道,你可以在没有hwndOfButton
的情况下离开 - 取决于对话框的实现!
可以是SendMessage
或PostMessage
,具体取决于您的使用案例。
答案 3 :(得分:3)
试试这个OK:
SendMessage(hWnd, WM_COMMAND, 1, NULL);
答案 4 :(得分: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));
}