简体   繁体   中英

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

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 want to go with simulating a click having X and Y coordinates as it doesn't suit my needs.

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

试试这个OK:

SendMessage(hWnd, WM_COMMAND, 1, NULL);

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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