Çalıştırılan programın kapanmasını beklemek.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erkan1525
Üye
Mesajlar: 113
Kayıt: 12 Ağu 2014 01:31

Çalıştırılan programın kapanmasını beklemek.

Mesaj gönderen erkan1525 »

Merhaba ustalar.
Diyelim winrarı bir dosyayı sıkıştırsın diye çalıştırdık. diğer satırların çalışmaya devam etmesi için winrarın kapanmasını beklemesini istiyorum. Bunu nasıl yapabilirim.

Mesela

işlem1
showmessage('mesaj');
işlem3
işlem4

Diye kodlar yazdığımızda mesaj kapanmadan diğer işlemler gerçekleşmiyor.
aynı çekilde bat dosyalarınada yazdığımız komutlarla bir uygulama çalıştırınca o uygulama kapanmadan sonraki satırlar çalışmıyor.

İşteee bunu delphide nasıl yaparım yani...???
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Çalıştırılan programın kapanmasını beklemek.

Mesaj gönderen thelvaci »

İlgili uygulamayı CreateProcess ile başlatıyorsanız; PROCESS_INFORMATION yapısındaki hProcess elemanını WaitForSingleObject ile INFINITE olarak bekleyebilirsiniz. İlgili uygulamayı ShellExecuteEx ile çalıştırıyorsanız; SHELLEXECUTEINFO yapısı içindeki hProcess elemanını kullanabilirsiniz.
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Çalıştırılan programın kapanmasını beklemek.

Mesaj gönderen G.Arkas »

Kod: Tümünü seç

procedure ExecuteAndWait(const aCommando: string);
var
  tmpStartupInfo: TStartupInfo;
  tmpProcessInformation: TProcessInformation;
  tmpProgram: String;
begin
  tmpProgram := trim(aCommando);
  FillChar(tmpStartupInfo, SizeOf(tmpStartupInfo), 0);
  with tmpStartupInfo do
  begin
    cb := SizeOf(TStartupInfo);
    wShowWindow := SW_HIDE;
  end;

  if CreateProcess(nil, pchar(tmpProgram), nil, nil, true, CREATE_NO_WINDOW,
    nil, nil, tmpStartupInfo, tmpProcessInformation) then
  begin
    // loop every 10 ms
    while WaitForSingleObject(tmpProcessInformation.hProcess, 10) > 0 do
    begin
      Application.ProcessMessages;
    end;
    CloseHandle(tmpProcessInformation.hProcess);
    CloseHandle(tmpProcessInformation.hThread);
  end
  else
  begin
    RaiseLastOSError;
  end;
end;
Kaynak: StackOverflow.
Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Çalıştırılan programın kapanmasını beklemek.

Mesaj gönderen mrmarman »

Bir ekleme de ben yapayım.
CreatePipe methodu ile kanca atıp, dos ekranında komut işletilirken yazılanları ReadFile methodu ile çekerek bir Memoya aktarabilir, kullanıcıların Command ekranında aslında neyi beklediğini anlamasını sağlayabilirsiniz. :idea:
Resim
Resim ....Resim
erkan1525
Üye
Mesajlar: 113
Kayıt: 12 Ağu 2014 01:31

Re: Çalıştırılan programın kapanmasını beklemek.

Mesaj gönderen erkan1525 »

G.Arkas yazdı:

Kod: Tümünü seç

proce.............
Çook teşekkürler süper işimi görüyor...
Cevapla