Member
Статус: Не в сети Регистрация: 31.12.2003 Откуда: Жукова
В общем пишу прогу. Она при повторном запуске должна закрывать свою уже запущенную копию. Делал проверку по заголовкам окон и <>Application.handle - но она , собака, все равно закрывает себя, а не уже запущенную копию. Так вот, как получить список PID привязанный к заголовкам окон? Или может какой-нить другой способ решения есть?
Member
Статус: Не в сети Регистрация: 31.12.2003 Откуда: Жукова
stargaz0r Я это делаю, чтобы работало с гирдером. Нажимаешь на кнопочку на пульте 1 раз в программе такие-то параметры, нажимаешь второй, другие, третий -третьи, и по кругу. Функция Sleep на центрах и телевизорах 15,30,90 мин, отмена и заново 15,30,90. Так что надо запускать...
Чтобы не геморроится, напишит программу - запускалку - она то точно будет знать - запущена твоя или нет. Или, например, FindWindow используй на событие Form1.Create - твое окно еще не будет создано и Handle будет либо твоей копии, либо не будет вообще.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Starr
Цитата:
В общем пишу прогу.
и
Цитата:
Я не программер - мне надо подробнее рассказывать...
Что-то не состыковывается. Ну значить так. Один вариант есть. Первая прога запускается и пишет в реестр свой HWND, вторая при запуске отсылает SendMessage на закрнытие первой и прописывает свой HWND в реестр и так далее
Member
Статус: Не в сети Регистрация: 31.12.2003 Откуда: Жукова
Ray Adams Все состыковывается - я учусь программить. Образование - схемотехник. Структурно все себе представляю, алгоритмы легко составляю, но сам язык не знаю.
Что-то ты недопонял - прога одна, название одно (т.е. заголовок окна). Надо при запуске второй копии закрывать первую. Я так понимаю это можно сделать только зная номер процесса.
Нафига в реестре мусорить. Я пишу все в файл (пока на винте, потом буду думать, как его в оперативке держать)
Последний раз редактировалось Starr 16.05.2004 18:46, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 15.04.2004 Откуда: Москва
Господа!
А не проще ли создавать мютекс?
При запуске, программа смотрит на наличие мьютекса, если он существует, то
посылаешь процессц-владельцу SIGTERM и создаешь мьютекс по новой.
Member
Статус: Не в сети Регистрация: 15.04.2004 Откуда: Москва
Притом. Значение хэндла - динамический параметр.
И по-хорошему, храниить его между сеансами работы не иммет никакого смысла.
Вот для таких параметров и предназначена динамическая ветвь реестра.
Это скоре на уровне рекомендаций от Мелкомягких, чем требование
Member
Статус: Не в сети Регистрация: 14.04.2003 Откуда: Минск, Беларусь
1. Получить PID (Process Identifier) по HWND: GetWindowThreadProcessId
2. Найти окно HWND поиском/перебором: FindWindow/EnumWindows.
stargaz0r
Цитата:
а не проще не запускать новую копию?
И в самом деле, принято поднимать старую копию (если она минимизирована, к примеру) в видимое состояние и завершаться. Хотя черт знает, что автору вопроса на самом деле надо.
Учитывая следующий пассаж:
Starr
Цитата:
Так вот, как получить список PID привязанный к заголовкам окон?
Что все таки надо 1 или 2? Или еще чего третье.
Цитата:
Я не программер - мне надо подробнее рассказывать
MSDN - подробностей на несколько гигабайт.
Цитата:
sendmessage(Wnd, WM_QUIT, 0, 0);
Не хорошо слать WM_QUIT, не по науке это. Принято WM_CLOSE засылать.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения