Зависать при извинении 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. И затем он заходит в тупик.