0

Anyboby 知道如何获取已创建窗口的文本吗?我设置了 hook on 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);
}
4

1 回答 1

2

“系统在将 WM_CREATE 或 WM_NCCREATE 消息发送到窗口之前调用挂钩过程。”

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

但是,回调本身也被传递给CREATESTRUCT. 如果传递给的名称CreateWindow是您所追求的,那么您也可以使用它。

于 2012-03-18T15:37:56.980 回答