I want to simulate a click on a button located in a dialog box.
I have the handle to that window. This is an Abort/Retry/Ignore kind of window.
I don\'t wan
Try this for OK:
SendMessage(hWnd, WM_COMMAND, 1, NULL);
Send a BM_CLICK
message to the HWND of the button:
SendMessage(hButton, BM_CLICK, 0, 0);
That causes the button to receive WM_LBUTTONDOWN
and WM_LBUTTONUP
messages, and the parent to receive an BN_CLICKED
notification, as if the user had physically clicked on the button.
Find the handle to the button that you want to click (by using FindWindowEx
), and just send click message:
SendMessage(hButton, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(0, 0));
SendMessage(hButton, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(0, 0));
Here is a complete function:
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));
}
SendMessage(hParent, WM_COMMAND, MAKEWPARAM(IdOfButton, BN_CLICKED), (LPARAM)hwndOfButton);
Typically you can get away without the hwndOfButton
, if you don't know it - depends on the dialog's implementation!
It can be SendMessage
or PostMessage
, depending on your use case.