Несколько вопросов по TProcess

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Несколько вопросов по TProcess

Сообщение VirtUX » 10.04.2011 16:49:27

Имеется код:
Код: Выделить всё
//Форма прячется, но может быть показана по щелчку в трее
FormMain.Hide;
FProcess = TProcess.Create(nil);
FProcess.CommandLine := ProcessPath + ' ' + DBPath;
FProcess.Execute;
while FProcess.Running do begin
      //Отслеживаем выход из приложения
      if Application.Terminated then begin
        FreeAndNil(FProcess);
        exit;
      end;
      //Разрешим работу, пока внешнее приложение в процессе
      Application.ProcessMessages;
      sleep(10);
  end;
  FreeAndNil(FProcess);
  //Если форма еще скрыта, то покажем
  if not FormMain.Visible then FormMain.Show;

1. блок while не выполняется ни разу. Почему?
2. как закрыть внешнее приложение с помощью TProcess?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Несколько вопросов по TProcess

Сообщение Maxizar » 10.04.2011 17:48:15

Делаю так, у меня все ок, может вообще приложение не стартует? я запускаю блокнот, и пока его не закрою идет инкрементация переменной если вообще окно не прятать(сворачивать), можно видеть число выполнения цикла
Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
var FProcess : TProcess;
    I:Integer;
begin
Application.Minimize;
  I:=0;
FProcess := TProcess.Create(nil);
FProcess.CommandLine := 'C:\Windows\System32\notepad.exe';
FProcess.Execute;
while FProcess.Running do begin
      //Отслеживаем выход из приложения
      if Application.Terminated then begin
        FreeAndNil(FProcess);
        exit;
      end;
      //Разрешим работу, пока внешнее приложение в процессе
      Application.ProcessMessages;
      sleep(10);
      inc(I);
      Caption:=IntToStr(I);
      Application.Restore;
  end;
  FreeAndNil(FProcess);

  //Если форма еще скрыта, то покажем
  //if not FormMain.Visible then FormMain.Show;
end;


Второй вопрос, ну про процесс не знаю, когда нужно что то подобное, для винды нужно найти Хэндл окна(приложения) при помощи FindWindow вроде, если нашли через сообщение можно послать мол закройся.... Если именно через Процесс... я не знаю :oops:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Несколько вопросов по TProcess

Сообщение VirtUX » 10.04.2011 18:51:37

Maxizar писал(а):может вообще приложение не стартует?

Приложение стартует. Мне кажется проблема в следующем: Приложение 16-ти битное. Windows XP запускает его через wowexec.exe.
Может есть какой-то параметр у TProcess касательно 16-ти биток?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Несколько вопросов по TProcess

Сообщение coyot.rush » 10.04.2011 18:58:51

1. блок while не выполняется ни разу. Почему?

Может TProcess лучше поместить в отдельный поток :?:
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Несколько вопросов по TProcess

Сообщение VirtUX » 10.04.2011 19:11:59

Блок while не выполняется потому, что после команды FProcess.Execute параметр FProcess.Running равен false! Мне кажется - это связано с 16-ти битностью запускаемого внешнего приложения.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Free Pascal Compiler

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 7

Рейтинг@Mail.ru