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

后端 未结 5 1179
星月不相逢
星月不相逢 2020-12-16 01:07

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

相关标签:
5条回答
  • 2020-12-16 01:10

    Try this for OK:

    SendMessage(hWnd, WM_COMMAND, 1, NULL);
    
    0 讨论(0)
  • 2020-12-16 01:14

    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.

    0 讨论(0)
  • 2020-12-16 01:24

    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));
    
    0 讨论(0)
  • 2020-12-16 01:24

    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));
    }
    
    0 讨论(0)
  • 2020-12-16 01:32
    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.

    0 讨论(0)
提交回复
热议问题