SetWindowsHookEx HCBT_CREATEWND GetWindowText - PullRequest
0 голосов
/ 18 марта 2012

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 Ответ

2 голосов
/ 18 марта 2012

"Система вызывает подключаемую процедуру перед отправкой сообщения WM_CREATE или WM_NCCREATE в окно."

В окне еще может не быть текста, ваш обратный вызов вызывается очень рано в процессе создания окна. Имя окна передается как часть CREATESTRUCT сообщения, отправляемого с WM_CREATE, которое было бы самым ранним, когда окно могло что-то сделать с текстом. Даже для того, чтобы что-то жестко закодировать, оно должно быть в WM_NCCREATE, что еще не произошло, когда вызывался ваш обратный вызов.

Однако , сам обратный вызов также получает CREATESTRUCT. Если имя, которое было передано CreateWindow, является тем, что вы ищете, это доступно также для вас.

...