Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];
ВнизПо 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c