如何检查窗口按钮是否被按下C++

问题描述:

如何测试按钮是否被按下?
我使用EnumChildWindows()来枚举给定窗口的子窗口,并且其中一个子窗口是一个按钮,我想测试该特定按钮是否被按下。
我的代码,直到知道的是:如何检查窗口按钮是否被按下C++

BOOL CALLBACK MyEnumProc(HWND hwnd, LPARAM lParam) 
{ 
    char buffer[256]; 
    GetWindowText(hwnd, buffer, sizeof(buffer)); 
    cout << buffer << endl; 
    return true; 
} 

int main() 
{ 
    HWND hwnd = FindWindow(0, "Window to find"); 
    EnumChildWindows(hwnd, MyEnumProc, 0); 

    return 0; 
} 
+0

你想,当用户点击该按钮做一些事情,或者你只是想检查按下的状态?检查BST_PUSHED不是一种常见的做法。如果用户快速点击,BST_PUSHED只会在很短的时间内设置。通常,应用程序通过在其窗口proc中侦听WM_COMMAND消息来处理按钮按钮。有关您的方案的更多信息可能会有所帮助:这是您的流程或其他流程的窗口吗? – BrendanMcK 2011-04-26 00:28:17

您可以将BM_GETSTATE消息的按钮控制,如果它被按压的结果将是 BST_PUSHED。

您需要在进程空间中注入一个DLL,挂钩窗口消息循环(就像您用于在本地Win32 API C代码中手动编写子代窗口代码,Window Proc)(google-able)并听取实际消息。

所有这些对我来说都是古老的东西,恐怕最近的Windows版本(希望)会让这一切变得更加困难。

这就是说,如果你能得到的权限适当级别的受信任的应用,你仍然应该能够做到这一点