AProcess.Options + [poWaitOnExit]

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Ну, например, так:

Код: Выделить всё

while AProcess.Running do begin 
  if application.terminated then
     Halt
  else
    Application.ProcessMessages;
end;
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

B4rr4cuda писал(а):  if application.terminated then Halt

Идея класная, но это: увы, к сожалению - не работает...
Должна же быть какая-то функция, типа: Крестик.onMouseDown... или Крестик.onClick... Или я чего-то непонимаю???
Как программисты отключили крестик??? Значит - есть функция... Спасите - помогите... :roll: ПОЖАЛУЙСТА <-- Волшебное слово :cry: .
Как крестик в системе называется???
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Как программисты отключили крестик???

OMFG
vitaly_l писал(а):Как крестик в системе называется???

омфг. я так больше не могу, он взрывает мне мозг..
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Ну коли речь пошла об извращениях можно при начале процесса устанавливать фокус на какойто кнопке , а при потере фокуса все рубить и закрывать приложение, про нажатии на кнопку закрытия фокус будет теряться и все сработает
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

B4rr4cuda писал(а):я так больше не могу, он взрывает мне мозг..

(Oh My Fucking God)... Извините ради Бога, уважаемый B4rr4cuda... Я не хотел взорвать Ваш мозг...
Ism писал(а):Ну коли речь пошла об извращениях можно при начале процесса устанавливать фокус на какойто кнопке

Я, примерно так, при помощи Esc - останавливаю процесс... Однако Ваш вариант сработает и при простом нажатии на форму...
Суть в том что, запускаются несколько процессов подряд и между ними можно прервать(при желании)...
Просто Halt делать нельзя, т.к. то что в Process - останется висеть в тасклисте и памяти... (очевидно поэтому отключили крестик)...

Вопрос остаётся в силе:
Как вызвать функции типа: "СистемныйКрестик".onMouseDown.?. или "СистемныйКрестик".onClick.?. (если такие есть)

.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

В вашем случае проще запустить процесс и отцепить его от программы, то есть при дезактивации Tproocess процесс продолжит выполняться. А при закрытии программы убивать его консольной командой taskkill
Или сделать две программы , вторая будет управляться через pipe
Ну или TThread
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Ism писал(а):Ну или TThread

У TThread будут теже возможности, что и у TProcess: Какой смысл менять шило на мыло?? (кстати, там - тоже заблокируется крестик)...
Ism писал(а):запустить процесс и отцепить его от программы, то есть при дезактивации Tproocess процесс продолжит выполняться.

Это класс! Спасибо! Это мне подходит; т.к. прерывать процесс мне не нужно. (мне нужно прервать между процессами)
Как отцепить процес? Как называется функция? Ключевые слова для поиска какие?...
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

в windows я делаю "cmd /k "notepad" "
и тогда Tprocess.Active:=false процесс остается работать.

Добавлено спустя 12 минут 55 секунд:
Внимание, для Lazarus 0.9.30.4 fpc 2.6.0 делать так , старый метод через commandline не поддерживается, хотя и работает

Process1.Active:=false;
Process1.ShowWindow:=swoHIDE;
Process1.Executable:='cmd';
Process1.Parameters.Clear;
Process1.Parameters.Add('/k');
Process1.Parameters.Add('notepad.exe');
Process1.Execute;
Sleep(1000);
Process1.Active:=false;
Ответить