Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не могу найти окно...

1.8K
18 ноября 2003 года
SeregaLBN
62 / / 03.10.2003
Есть SDI приложение, в котором на CFormView вставлена ActiveX компонента IE browser. И есть HTML-странички которые просматриваются с его помощью. На форму этой странички пользователь проги вводит некие данные, которые я проверяю c помощью JavaScript на правильность. Если были введены неверные данные я уведомляю об этом пользователя с помощью JavaScript'ового модального MessageBox'а (функция alert(..) на JavaScript).
А теперь собственно о проблеме - если пользователь неудосужился закрыть этот диалог, мне необходимо самому из проги на 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);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог