Winapi SetWindowsHookEx HCBT_CREATEWND GetWindowText

Winapi SetWindowsHookEx HCBT_CREATEWND GetWindowText,winapi,setwindowshookex,Winapi,Setwindowshookex,任何人都知道如何获取已创建窗口的文本?我在CreateWindow上设置了钩子,但是GetWindowText返回空字符串 hCBTHook = SetWindowsHookEx(WH_CBT, (HOOKPROC) &CBTHook, g_appInstance, 0); LRESULT CALLBACK CBTHook(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode == HCBT_CREATEWND) {

任何人都知道如何获取已创建窗口的文本?我在
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);
}

窗口可能还没有文本,在创建窗口的过程中很早就调用了回调。窗口的名称作为
CREATESTRUCT
消息的一部分传入,该消息随
WM_CREATE
一起发送,这将是窗口最早可以对文本进行处理的消息。即使要硬编码一些东西,它也必须在
WM\u NCCREATE
中,这在调用回调时还没有发生


但是,回调本身也会被传递到
CREATESTRUCT
。如果传递给
CreateWindow
的名称是您所要的,那么这对您也是一样的。

可访问性挂钩在这类事情上工作得更好。