Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Процессы   Найти похожие ветки 

 
Nekto   (2004-03-21 23:19) [0]

Как закрыть процесс: Есть две проги. Одна типа ключа. Вторая - рабочая. Ключ висит в процессах. По завершению второй надо убить первую!


 
Defunct ©   (2004-03-22 02:02) [1]

По завершении второй:

API - TerminateProcess
или
SendMessage(FindWindow("TForm1","Form1"),WM_CLOSE,0,0);

Где
TForm1 - класс главной формы первой программы
Form1  - имя экземпляра главной формы первой программы.


 
Alexander666 ©   (2004-03-22 02:34) [2]


> Как закрыть процесс: Есть две проги. Одна типа ключа. Вторая
> - рабочая. Ключ висит в процессах. По завершению второй
> надо убить первую!

Интересный вопрос...


 
Юрий Зотов ©   (2004-03-22 06:57) [3]

Если вторая запускается из первой, то достаточно в первой просто использовать WaitForSingleObject. Если нет - см. [1] (но лучше все же обойтись без TerminateProcess).


 
Sphinx ©   (2004-03-22 07:53) [4]

> API - TerminateProcess
И "слишком умная" WinXP (2k, Me) тут же попросит написать отчетик об ошибках и отправить их Майкрософту.


 
Cobalt ©   (2004-03-22 09:03) [5]

Halt(0) достаточно, по-моему.


 
Nekto   (2004-03-22 22:53) [6]

2: Defunct
  SendMessage(FindWindow("TForm1","Form1"),WM_CLOSE,0,0);
А если запущены 10 прог с Form1: TForm1, хотя интересно попробую.

2: всем
  Ось "Неизвестная", вернее сказать любая, но скорее NT

2: Юрий Зотов
  Прога 1 запускается отдельно (или не запускается вообще)

2: Cobalt
  Halt(0) Это к чему???


 
Cobalt ©   (2004-03-22 23:24) [7]

>  Halt(0) Это к чему???
Это было к Sphinx © [4]

> Прога 1 запускается отдельно (или не запускается вообще)
Если планируется только в однопользовательскоми режиме на компе (т.е. один сеанс пользователя - в ХР их может быть несколько, там уже другие прибамбасы), то, по-моему, будет достаточно именованного объекта ядра (события, или мьютекса, не уверен), которое будет удерживаться прогой1, и состояние которого изменится при закрытии её.

В проге2 проверять состояние этого именованного объекта, и  закрываться при соответсвующем состоянии.

А вообще-то, очень много зависит от тех ньюансов, о которых вы умолчали
- взаимодействие проги1 и проги2?
- количество проги2?
- количество проги1 (на одном компе - ограничения функциональные/лицензионные/прочие)?


 
Nekto   (2004-03-23 08:36) [8]

Взаимодействия между прогами прямого нет. Если описать грубо: Первыя проверяет наличие опред. файла и если его нет, то создает его. Вторая проверяет ентот же файл и если его нет, то она не работает. По завершению своей работы, она убивает и тот файл и прамму - ключ (последнее пока не работает). Ключ запускается только один раз (пока тоже не работает, но сделаю), прогу можно запустить много раз, хотя смысла в этом нету. Про XP: зачем проверять ключ с другого сеанса? Не будем загонятся если не нужно. Хотя если ключ висит => генерирует файл => программа доступна, но это не важно. Смысл - убить ненужный уже процесс по завершению программы.


 
Романов Р.В. ©   (2004-03-23 09:14) [9]

Программы при запуске регистрируют сообщение см. RegisterWindowMessage и при закрытии посылается сообщение SendMessage всем окнам HWND_BROADCAST. При получении сообщения процесс завершает работу.


 
Fredericco ©   (2004-03-23 12:25) [10]

Романов Р.В. ©   (23.03.04 09:14) [9]
Согласен.

Если первый процесс написан тобой то я бы сделал так:

Первая прога:

 ...
 Procedure DefaultHandler(Var Message);override;
 ...
 CardinalVar:Cardinal;
 ...
 CardinalVar:=RegisterWindowMessage("HelloFromSecondProcess");
 ...
 procedure TForm1.DefaultHandler(var Message);
 var
   i:integer;
   g,c:string;
   Client:PHSClient;
 begin
   with TMessage(Message) do  begin
      if Msg = CardinalVar then begin
          Form1.Close;  
      end Else Inherited DefaultHandler(Message);
   end;
end;


А во второй проге следующее:

 ...
 CardinalVar:Cardinal;
 ...
 CardinalVar:=RegisterWindowMessage("HelloFromSecondProcess");
 ...
 SendMessage(HWND_BROADCAST,CardinalVar,0,0);



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.042 c
1-1080127303
Zilog
2004-03-24 14:21
2004.04.11
Расчет времени! Нужна помощь...


14-1082013546
McSimm
2004-04-15 11:19
2004.04.11
Я приношу извинения всем посетителям сайта


1-1079958830
RodAM
2004-03-22 15:33
2004.04.11
Переход D5 - D7


7-1080287700
Ghost
2004-03-26 10:55
2004.04.11
Система


14-1079761597
isko
2004-03-20 08:46
2004.04.11
все заплатки и обновления...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский