2012-03-18 59 views
0

Anyboby知道如何獲得創建窗口的文本?我在CreateWindow上設置了鉤子,但是GetWindowText返回空字符串。SetWindowsHookEx HCBT_CREATEWND GetWindowText

hCBTHook = SetWindowsHookEx(WH_CBT, (HOOKPROC) &CBTHook, g_appInstance, 0); 

LRESULT CALLBACK CBTHook(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    if(nCode == HCBT_CREATEWND) 
    { 
      HWND hwnd = (HWND)wParam; 
      CHAR buf[256]; 
      GetWindowText(hwnd, buf, 256); 
    } 

    return CallNextHookEx(hCBTHook, nCode, wParam, lParam); 
} 
+1

Accessiblility掛鉤對這類事情的工作要好得多。 – 2012-03-18 19:50:27

回答

1

"The system calls the hook procedure before sending the WM_CREATE or WM_NCCREATE message to the window."

窗口可能沒有文字呢,你的回調是在窗口創建的過程中很早就調用。該窗口的名稱作爲與WM_CREATE一起發送的CREATESTRUCT消息的一部分傳入,這將是窗口最早可以對文本進行操作的一部分。即使要硬編碼,它也必須在WM_NCCREATE之內,當你的回調被調用時,仍然還沒有發生。

但是,回調本身也通過了CREATESTRUCT。如果傳遞給CreateWindow的名稱是您以後的名字,那麼也是available

+0

你能提供工作代碼嗎? – user1277031 2012-03-18 16:28:06