2012-03-18 164 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