Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1256765411
Юрий
2009-10-29 00:30
2009.12.27
С днем рождения ! 29 октября 2009 четверг


2-1257514920
Дмитрий Белькевич
2009-11-06 16:42
2009.12.27
I/O error 23 при чтении файла


2-1257928226
1987
2009-11-11 11:30
2009.12.27
Handle s


2-1257532084
Незнайка
2009-11-06 21:28
2009.12.27
вызов KeyPress


11-1201519573
Татьяна
2008-01-28 14:26
2009.12.27
Программирование многооконного приложения для WinCE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский