Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2007, 01:00   #1
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию Необходимо узнать о создании окна

Таймер несколько раз в секунду должен запускать процедуру провеки, появилось ли новое окно. Необходимо получить ответ на вопрос - создалось ли какое-нибудь новое окно.
Alar вне форума Ответить с цитированием
Старый 21.11.2007, 18:35   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

попробуйте вести лог окон... что не есть хорошо. В помощь подойдут функции NextWindow FirstWindow и другие с припиской Window ( вроде не ошибся ).

2й вариант который наиболее будет правильней - перехват апи. Попытатся переписать апи функцию CreateWindow и CreateWindowEx. И ссылаться на свою и после из своей вызывать оригинал... проблемы скорей всего будут с правами на компе + лишний вес с прогой ( если это играет для Вас роль ). Я лично не занимался перехватом но смотрел и проверял примеры ( по опыту, при тесте своего примерчика, мне приходилось перезагружать систему из-за моих ошибок ).

Собственно окон и не так много так что лог будет полегче осуществить ( что собственно я лично и сделал бы ). А проверять флаги окон на то, что они являются родителями а не всякие кнопки и т.п.

Ах да вариант ( конечно незнаю сработает ли ) найти хендл таск бара и в нем искать те окна которые отображаются на нем.
BOBAH13 вне форума Ответить с цитированием
Старый 21.11.2007, 19:42   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

вот пример программы которая ставит перехват на функцию MessageBoxExA (и как следствие на функцию MessageBoxA) В СВОЁМ ПРОЦЕССЕ
если надо будет перехватить создание любых окон, но надо аналогично перехватывать CreateWindowExA, но потом могут быть проблемы.
Вложения
Тип файла: zip apihook.zip (6.3 Кб, 17 просмотров)

Последний раз редактировалось rpy3uH; 21.11.2007 в 19:45.
rpy3uH вне форума Ответить с цитированием
Старый 22.11.2007, 01:27   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

rpy3uH, выкладываю пример окна с ошибкой.
Впринципе, если возможно, нужно кликнуть по кнопке нет, хотя можно просто блокировать окно.

Для вызова ошибки нужно 2 раза кликнуть на go.
Один раз для загрузки страницы и один раз для вызова ошибки.
Вложения
Тип файла: rar кликнть 2 раза по go.rar (16.7 Кб, 13 просмотров)
Alar вне форума Ответить с цитированием
Старый 22.11.2007, 01:41   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
Таймер несколько раз в секунду должен запускать процедуру провеки, появилось ли новое окно. Необходимо получить ответ на вопрос - создалось ли какое-нибудь новое окно.
Окно дочернее или top-level?
Не смог посмотреть в работе "2 раза кликнуть на go" - у меня нет CL-компонентов.

Последний раз редактировалось mihali4; 22.11.2007 в 02:21.
mihali4 вне форума Ответить с цитированием
Старый 22.11.2007, 01:44   #6
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Окно дочернее или top-level?
Окно создается Ишаком - webbrowser. Реакция на ошибку при выполнении ява скрипта.
Alar вне форума Ответить с цитированием
Старый 22.11.2007, 02:28   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Может, я чего-то не понял...
Родитель известен. Простейшее решение - действительно, как и предлагалось - составить первоначальный список окон родителя и проверять по таймеру для начала их количество. Потом - имя класса окна.
Либо, если имя класса уникальное, то енумом проверять наличие такого окна.
mihali4 вне форума Ответить с цитированием
Старый 22.11.2007, 08:24   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что если в таймере получать хендл вновьпоявившегося окна (я правильно думаю что оно появляется на переднем плане?) через GetForegroundWindow, далее проверять его класс и (может) заголовок и если это оно то... Ну что там нуна эт уж фантазия пусть старается.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.11.2007, 19:56   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

в общем вот та же программа, нажимаем "Поставить перехват", нажимаем два раза GO, сообщение ишака не выводится, выводится только дельфёвое сообщение.
Вложения
Тип файла: zip proga.zip (7.8 Кб, 10 просмотров)

Последний раз редактировалось rpy3uH; 23.11.2007 в 19:30.
rpy3uH вне форума Ответить с цитированием
Старый 22.11.2007, 23:05   #10
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

rpy3uH, толку ноль

Универсального решения не получилось, заблокировать окна у меня не получилось.
Сделал несколько частных случаев.

Вот один из них - окно появляется и сразу закрывается кнопкой Escape


Код:
var
 WndHandle: HWND;

begin
     WndHandle := FindWindow(nil, 'Microsoft Internet Explorer');
 if WndHandle <> 0 then
 begin
   beep;
   SendMessage(WndHandle, WM_SETFOCUS, 0, 0);
   Keybd_event(VK_ESCAPE, 0, 0, 0);
end;



end;
Alar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как имея handle окна узнать handle edit-a который находится в етом окне SeRhy Общие вопросы Delphi 1 20.07.2008 13:48
Как мне в обработчике хука узнать хендл окна? vitalik007 Win Api 5 16.05.2008 09:34
Размер окна в зависимости от размера окна Reverent JavaScript, Ajax 1 02.02.2008 15:49
закрыть все дочерни окна, кроме главного окна Worms Общие вопросы Delphi 2 03.12.2007 22:18
Как сделать чтобы дочерние окна в MDI-приложениях были вне главного окна??? dimonchuk Общие вопросы Delphi 1 11.08.2007 12:13