![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
По 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]А в качестве результата ?