Зависать при извинении GetWindowText() в dll

Код:

HWND hWnd;  //this is a window handle of current process 
/*
*here is executed in a dll in current process , and it will hang 
*when hWnd is a window which is created by current process.
*/
WCHAR lpwWndName[1000];
GetWindowText(hWnd,lpwWndName,1000);   

Я прочитал MSDN:

1, когда hWnd создается другим процессом, GetWindowText получит заголовок из специального пространства;

2. Когда hWnd создается текущим процессом, GetWindowText отправит WM_GETTEXT в hWnd, этот метод может зависнуть, если hWnd не отвечает WM_GETTEXT.

Как решить эту проблему? Спасибо.

1 ответ

Причиной этой проблемы является оправдание GetWindowText() в функции обработки сообщений.

message process function()
switch(code)
{
case WM_COMMAND:
  GetWindowText(hWnd);
  break;
case WM_GETTEXT:
  break;
}

если hWnd создан текущим процессом, GetWindowText() отправит WM_GETTEXT в окно и будет ждать результата, но WM_GETTEXT будет обработан после процесса WM_COMMAND. И затем он заходит в тупик.

Другие вопросы по тегам