Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

По Handle окна найти окно [D7, XP]


Alex_C ©   (2009-11-10 13:07:00) 

Есть ли аналог FindWindow, но где в качестве параметра фигурирует Handle окна.


Dennis I. Komarov   (2009-11-11 14:04:00) [1]


> Alex_C   (11.11.09 13:36) [16]

А если так, то достаточно получить список процессов и проверить наличия присутствия (отсутствия) нужного


Alex_C   (2009-11-11 13:36:00) [2]


> А где ответ на [4]?


А, "работатет" - означает что приложение запущено, т.е. оно находится в Диспетчере задач. Т.е. оно может быть и не активно.


Dennis I. Komarov   (2009-11-11 09:50:00) [3]


> Alex_C   (11.11.09 09:44) [14]

А где ответ на [4]?


Alex_C   (2009-11-11 09:44:00) [4]


> Не нужно этого, и таймер не нужен. При своем завершении
> основная программа уведомляет об этом служебную (той же
> самой посылкой сообщения) - вот и вся проблема.


Это естественно  есть, а вот против этого:


> Грохнули основную вандалы, и по мнению служебной она еще
> жива...


> Основная выполнила RecreateWnd и по мнению служебной она
> уже мертва.


> Потому что проверка старого хэндла по таймеру покажет, что
> такого окна нет.


> Это я к тому, что одна схема ничуть не лучше другой в смысле
> вандализма, но если без вандализма, то вторая менее ресурсоемкая
> и более надежная.


В общем именно из за этого вопрос и возник. И почитав разные примеры, понял, что единого решения нет... Да и ситуация "вандализма" в общем то не так критична.


Dennis I. Komarov   (2009-11-10 18:06:00) [5]


> Юрий Зотов ©   (10.11.09 16:52) [11]

А с этим я не спорю ;)


Leonid Troyanovsky   (2009-11-10 17:44:00) [6]


> Alex_C   (10.11.09 13:22) [2]

> Пока я придумал посылать основной программе сообщение и
> ждать ответа 5 сек. Если ответа нет - выход.

Все заинтересованные хранители хендлов должны хучить создавшие оные
окна потоки на предмет, скажем, WM_DESTROY.
Бо, именно оно и известит о наступившей инвалидности хранимого.

--
Regards, LVT.


Юрий Зотов   (2009-11-10 16:52:00) [7]

> Dennis I. Komarov ©   (10.11.09 16:34) [9]

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


Юрий Зотов   (2009-11-10 16:50:00) [8]

> Юрий Зотов ©   (10.11.09 16:02) [8]

Потому что проверка старого хэндла по таймеру покажет, что такого окна нет.


Dennis I. Komarov   (2009-11-10 16:34:00) [9]


> Юрий Зотов ©   (10.11.09 16:02) [8]

Почему?


Юрий Зотов   (2009-11-10 16:02:00) [10]

> Dennis I. Komarov ©   (10.11.09 15:32) [7]

Основная выполнила RecreateWnd и по мнению служебной она уже мертва.


Dennis I. Komarov   (2009-11-10 15:32:00) [11]


> Юрий Зотов ©   (10.11.09 15:01) [6]

Грохнули основную вандалы, и по мнению служебной она еще жива...


Юрий Зотов   (2009-11-10 15:01:00) [12]

> Необходимо проверять служебной программе, что основная программа
> работает (по таймеру, раз в 5 сек).

Не нужно этого, и таймер не нужен. При своем завершении основная программа уведомляет об этом служебную (той же самой посылкой сообщения) - вот и вся проблема.


sniknik   (2009-11-10 14:02:00) [13]

> Однако вот думаю, может есть какой более верный способ.
да есть, сразу пойти на какой нибудь английский форум раз на этом ты ни одного вопроса не решил, все там...

ну и второй вариант, неприемлемый для тебя естественно. - не парится фигней с "низкоуровневым" программированием, сделать связь по готовому протоколу, типа tcp/ip (другого), это во первых даст кучу примеров прямо в поставке дельфи (если взять инди), во вторых "само" следит за коннектом, и тогда никаких таймеров просто ловишь отключение и принимаешь какие то меры (выход из программы это не мера, это бегство, а вот например сообщение и ожидание когда "твою пару" снова запустят вполне...)


Dennis I. Komarov   (2009-11-10 13:45:00) [14]


> что основная программа работает

что значит работает?


Сергей М.   (2009-11-10 13:28:00) [15]


> узнать, есть ли это окно еще в системе или оно уже закрыто


см. IsWindow


> может есть какой более верный способ


см. Mutex, WaitForSingleObject, MsgWaitForMultipleObjects


Alex_C   (2009-11-10 13:22:00) [16]

Не нужен результат. Нужно узнать, есть ли это окно еще в системе или оно уже закрыто.
Сейчас понимаю, что это не верно. Т.к. этот же хендл может быть уже отдан другому окну. Тогда вопрос:
есть 2 программы: основная (при чем в качестве основной программы могут выступать разные программы) и служебная. Взаимодействие при помощи Messages. В начале работы они между собой обмениваются хендлами основных окон, чтоб слать друг другу сообщения. Необходимо проверять служебной программе, что основная программа работает (по таймеру, раз в 5 сек). Если не работает - выход.
Пока я придумал посылать основной программе сообщение и ждать ответа 5 сек. Если ответа нет - выход.
Однако вот думаю, может есть какой более верный способ.


Сергей М.   (2009-11-10 13:11:00) [17]

А в качестве результата ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо