Не могу найти окно...
А теперь собственно о проблеме - если пользователь неудосужился закрыть этот диалог, мне необходимо самому из проги на MFC это выполнить. Но я немогу этого сделать так как ненахожу данного окна...
Поиск окна я выполняю след. образом:
В классе CMainFrame есть локальный хук, который перехватывает процедуру обработки сообщений у этого же класса CMainFrame.
В этом хуке я "вешаюсь" на сообщение WM_ENABLE и обрабатываю его когда enabled/disabled flag равен FALSE (т.е. когда появилось, в моём случае, некое модальное окно). А сама обработка заключается в поиске модального окна.
Модальное окно, которое мне надо найти, имеет след. заголовок "Microsoft Internet Explorer", а левая тулза показывает что именем класса окна является "#32770".
Кроме этого, я пытаюсь найти окно с помощью EnumChildWindows, которой передаю в качестве CALLBACK ф-ции адрес своей ф-ции EnumChildProc.
В EnumChildProc я выполняю вывод заголовка окна.
Так вот hWnd_alert всегда == NULL. А EnumChildProc выводит несколько пустых заголовков и ?! один заголовок "Ready", т.е. ничего похожего на правду.
Подскажите где грабли. Насколько я понимаю у меня логика проги хромает...
PS: Logger.Put(...) - мой аналог MFC'шного TRACE'a.
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
TCHAR szCaption[64] = {0};
::GetWindowText(hwnd, szCaption, 64);
Logger.Put("WindowText = %s\n", szCaption);
return TRUE;
}
WNDPROC defWndProc_CMainFrame;
LRESULT CALLBACK newWndProc_CMainFrame(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_ENABLE:
Logger.Put("fEnabled = %i\n", (BOOL)wParam);
if (!(BOOL)wParam) {
HWND hWnd_alert = FindWindow(NULL, "Microsoft Internet Explorer");
//HWND hWnd_alert = FindWindow("#32770", NULL);
Logger.Put("hWnd_alert = %x\n", hWnd_alert);
if (hWnd_alert) {
TCHAR szCaption[64] = {0};
::GetWindowText(hWnd_alert, szCaption, 64);
Logger.Put("WindowText (hWnd_alert) = %s\n", szCaption);
}
EnumChildWindows(hwnd, EnumChildProc, 0);
}
break;
}
return CallWindowProc((WNDPROC)defWndProc_CMainFrame, hwnd, msg, wParam, lParam);
}