2011-04-25 124 views
2

如何測試按鈕是否被按下?
我使用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

回答

3

您可以將BM_GETSTATE消息的按鈕控制,如果它被按壓的結果將是 BST_PUSHED。

1

您需要在進程空間中注入一個DLL,掛鉤窗口消息循環(就像您用於在本地Win32 API C代碼中手動編寫子代窗口代碼,Window Proc)(google-able)並聽取實際消息。

所有這些對我來說都是古老的東西,恐怕最近的Windows版本(希望)會讓這一切變得更加困難。

這就是說,如果你能得到的權限適當級別的受信任的應用,你仍然應該能夠做到這一點

相關問題