SetWindowsHookEx HCBT_CREATEWND GetWindowText

时间:2012-03-18 15:15:33

标签: winapi setwindowshookex

Anyboby知道如何获取已创建窗口的文本?我在CreateWindow上设置了挂钩,但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 个答案:

答案 0 :(得分:2)

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

窗口可能还没有文本,在窗口创建过程中很早就会调用回调。窗口的名称作为CREATESTRUCT消息的一部分传入,WM_CREATE消息是最早的窗口可以对文本进行操作。即使是硬编码的东西,它也必须在WM_NCCREATE中,当你的回调被调用时,它仍然没有发生。

然而,回调本身也会传递CREATESTRUCT。如果传递给CreateWindow的名称就是您所追求的名称,那么available也是如此。