Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 53 • Страница 1 из 31  2  3  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 31.12.2003
Откуда: Жукова
В общем пишу прогу. Она при повторном запуске должна закрывать свою уже запущенную копию. Делал проверку по заголовкам окон и <>Application.handle - но она , собака, все равно закрывает себя, а не уже запущенную копию. Так вот, как получить список PID привязанный к заголовкам окон? Или может какой-нить другой способ решения есть?



Партнер
 

Member
Статус: Не в сети
Регистрация: 23.09.2003
Откуда: South Ural
Starr
а не проще не запускать новую копию? :)

_________________
http://stargaz0r.nm.ru
http://people.overclockers.ru/StarGaz0r/files


 

Member
Статус: Не в сети
Регистрация: 31.12.2003
Откуда: Жукова
stargaz0r
Я это делаю, чтобы работало с гирдером. Нажимаешь на кнопочку на пульте 1 раз в программе такие-то параметры, нажимаешь второй, другие, третий -третьи, и по кругу. Функция Sleep на центрах и телевизорах 15,30,90 мин, отмена и заново 15,30,90. Так что надо запускать...


 

Member
Статус: Не в сети
Регистрация: 02.07.2003
Starr

Кажется была функция GetThreadProcessID();

_________________
Seleron, GeForse и Windovs -три любимых слова ламеров.


 

Member
Статус: Не в сети
Регистрация: 31.12.2003
Откуда: Жукова
Neo A.D.
Что-то нету в хелпе... Есть GetThreadPriority, но это из другого леса...
А какой к ней Uses?


 

Member
Статус: Не в сети
Регистрация: 23.09.2003
Откуда: South Ural
Starr

используй ф-и toolhelp api

_________________
http://stargaz0r.nm.ru
http://people.overclockers.ru/StarGaz0r/files


 

Member
Статус: Не в сети
Регистрация: 31.12.2003
Откуда: Жукова
stargaz0r Куда ты меня послал :shock: ?
Я не программер - мне надо подробнее рассказывать...


 

Member
Статус: Не в сети
Регистрация: 20.11.2003
Чтобы не геморроится, напишит программу - запускалку - она то точно будет знать - запущена твоя или нет. Или, например, FindWindow используй на событие Form1.Create - твое окно еще не будет создано и Handle будет либо твоей копии, либо не будет вообще.


 

Member
Статус: Не в сети
Регистрация: 23.09.2003
Откуда: South Ural
Starr
на http://www.rsdn.ru набери в поиске toolhelp

_________________
http://stargaz0r.nm.ru
http://people.overclockers.ru/StarGaz0r/files


 

Member
Статус: Не в сети
Регистрация: 31.12.2003
Откуда: Жукова
Mike-L Использую FindWindow и закрывается вторая копия, а надо, чтобы первая.


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Starr
Цитата:
В общем пишу прогу.

и
Цитата:
Я не программер - мне надо подробнее рассказывать...


Что-то не состыковывается. :)
Ну значить так. Один вариант есть. Первая прога запускается и пишет в реестр свой HWND, вторая при запуске отсылает SendMessage на закрнытие первой и прописывает свой HWND в реестр и так далее :)


 

Member
Статус: Не в сети
Регистрация: 31.12.2003
Откуда: Жукова
Ray Adams Все состыковывается - я учусь программить. Образование - схемотехник. Структурно все себе представляю, алгоритмы легко составляю, но сам язык не знаю.
Что-то ты недопонял - прога одна, название одно (т.е. заголовок окна). Надо при запуске второй копии закрывать первую. Я так понимаю это можно сделать только зная номер процесса.
Нафига в реестре мусорить. Я пишу все в файл (пока на винте, потом буду думать, как его в оперативке держать)


Последний раз редактировалось Starr 16.05.2004 18:46, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 07.10.2003
Откуда: Russia, Moscow
Starr Недопонял ты. Читай пост Ray Adams еще раз.

_________________
В поиске включайте "Искать все слова". Избегайте многоточий.
Зачем нужен разгон? http://tsc.overclockers.ru


 

Member
Статус: Не в сети
Регистрация: 31.12.2003
Откуда: Жукова
Все решено:
Ф-я GetWindow(Application.Handle, gw_HWndFirst) возвращает pid
Хе-хе, всем спасибо :beer:

Добавлено спустя 16 минут, 3 секунды:
Что-то не закрывается...
var Wnd : hWnd;
-------------
Wnd := GetWindow(Application.Handle, gw_HWndFirst);
------------
sendmessage(Wnd, WM_QUIT, 0, 0);

Что я сделал не так?


 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
Господа!
А не проще ли создавать мютекс?
При запуске, программа смотрит на наличие мьютекса, если он существует, то
посылаешь процессц-владельцу SIGTERM и создаешь мьютекс по новой.

_________________
Цель жизни - d20 по жизни...


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Starr Сделай так как я написал :)


 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
Ray Adams
Только писать имеет смысл в динамическую ветвь реестра.. :) Так аккуратнее и правильней.

_________________
Цель жизни - d20 по жизни...


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Цитата:
Только писать имеет смысл в динамическую ветвь реестра.. Так аккуратнее и правильней.

А при чем тут это? :)


 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
Притом. Значение хэндла - динамический параметр.
И по-хорошему, храниить его между сеансами работы не иммет никакого смысла.
Вот для таких параметров и предназначена динамическая ветвь реестра.
Это скоре на уровне рекомендаций от Мелкомягких, чем требование :)

_________________
Цель жизни - d20 по жизни...


 

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 засылать.

Цитата:
Ф-я GetWindow(Application.Handle, gw_HWndFirst) возвращает pid

GetWindow в принципе не может PID вернуть, только HWND. Ты не путаешь чего?

_________________
"Помогите, 20 беспроводных мышей общаются сквозь стены!"
--- SweetLow ---


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 53 • Страница 1 из 31  2  3  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan