Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.27;
Скачать: CL | DM;

Вниз

По Handle окна найти окно   Найти похожие ветки 

 
Alex_C   (2009-11-10 13:07) [0]

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


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

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


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

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


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


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


см. IsWindow


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


см. Mutex, WaitForSingleObject, MsgWaitForMultipleObjects


 
Dennis I. Komarov ©   (2009-11-10 13:45) [4]


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

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


 
sniknik ©   (2009-11-10 14:02) [5]

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

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


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

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

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


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


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

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


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

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

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


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


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

Почему?


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

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

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


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

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

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


 
Leonid Troyanovsky ©   (2009-11-10 17:44) [12]


> Alex_C   (10.11.09 13:22) [2]

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

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

--
Regards, LVT.


 
Dennis I. Komarov ©   (2009-11-10 18:06) [13]


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

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


 
Alex_C   (2009-11-11 09:44) [14]


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


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


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


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


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


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


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


 
Dennis I. Komarov ©   (2009-11-11 09:50) [15]


> Alex_C   (11.11.09 09:44) [14]

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


 
Alex_C   (2009-11-11 13:36) [16]


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


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


 
Dennis I. Komarov ©   (2009-11-11 14:04) [17]


> Alex_C   (11.11.09 13:36) [16]

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



Страницы: 1 вся ветка

Текущий архив: 2009.12.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
15-1256515183
POOP
2009-10-26 02:59
2009.12.27
Программа для рисования линий


15-1256309335
YurikGL
2009-10-23 18:48
2009.12.27
Тупо списали с видеокамеры, теперь оно не играет


15-1256560905
Knight
2009-10-26 15:41
2009.12.27
Вопрос на засыпку по TSocketServer+браузер


1-1230616083
Karburator
2008-12-30 08:48
2009.12.27
сложное заглавие таблицы


2-1257402647
d@nger
2009-11-05 09:30
2009.12.27
Обновление Master-Detail таблицы (Firebird)