Форум: "Основная";
Текущий архив: 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.049 c