Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

"Hvatanje" zavrsetka ShellExecute

[es] :: Pascal / Delphi / Kylix :: "Hvatanje" zavrsetka ShellExecute

[ Pregleda: 1908 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vortex77

Član broj: 91694
Poruke: 124
*.static.sbb.rs.



+1 Profil

icon "Hvatanje" zavrsetka ShellExecute31.08.2011. u 10:15 - pre 153 meseci
Pozdrav svima,

Pokusao sam da na forumu pronadjem odgovor na mmoje pitanje, ali nisam imao srece.

Problem je sledeci :

Potrebno je detektovati kraj procesa koji se pokrece izvrsavanjem ShellExecute.

Konkretno, koristim shellExecute da bih izvrsio kopiranje MySql podataka izmedju 2 servera :
Code:

if ShellExecute(Handle, nil,'mysqldump.exe', PChar(params), nil, 1) <= 32 then
  begin
     MessageDlg('Greska prilikom izvrsavanja mysqldump! ',mtError,[mbOK],0);
     Exit;
  end;


Sama komanda se ispravno izvrsava, ali ono sto je potrebno jeste detektovati kraj izvrsavanja mysqldump komande (ShellExecute po default-u pokrece command prompt).
Prebacivanje podataka moze potrajati tako da rad samog programa mora biti pauziran dok se prebacivanje ne zavrsi.


Hvala
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.dynamic.sbb.rs.



+395 Profil

icon Re: "Hvatanje" zavrsetka ShellExecute31.08.2011. u 10:35 - pre 153 meseci
Neces to postici sa ShellExecute funckijom .

Probaj sa ShellExecuteEx ili sa CreateProcess f-ijom da bi dobio procees id ili handle od procesa .

Onda imas vise opcija za ovo : GetExitCodeProcess ili WaitForInputIdle ako hoces odmah da cekas da se proces ne zavrsi .

Viva lollapalooza
 
Odgovor na temu

vortex77

Član broj: 91694
Poruke: 124
*.static.sbb.rs.



+1 Profil

icon Re: "Hvatanje" zavrsetka ShellExecute31.08.2011. u 10:49 - pre 153 meseci
Hvala, radi savrseno :D

Evo i primera sa delphi.about.com za slucaj da nekome treba nesto slicno.

Code:

 // Execute the Windows Calculator and pop up
 // a message when the Calc is terminated.
 uses ShellApi;
 ...
 var
    SEInfo: TShellExecuteInfo;
    ExitCode: DWORD;
    ExecuteFile, ParamString, StartInString: string;
 begin
    ExecuteFile:='c:\Windows\Calc.exe';
 
    FillChar(SEInfo, SizeOf(SEInfo), 0) ;
    SEInfo.cbSize := SizeOf(TShellExecuteInfo) ;
    with SEInfo do begin
      fMask := SEE_MASK_NOCLOSEPROCESS;
      Wnd := Application.Handle;
      lpFile := PChar(ExecuteFile) ;
 {
 ParamString can contain the
 application parameters.
 }
 // lpParameters := PChar(ParamString) ;
 {
 StartInString specifies the
 name of the working directory.
 If ommited, the current directory is used.
 }
 // lpDirectory := PChar(StartInString) ;
      nShow := SW_SHOWNORMAL;
    end;
    if ShellExecuteEx(@SEInfo) then begin
      repeat
        Application.ProcessMessages;
        GetExitCodeProcess(SEInfo.hProcess, ExitCode) ;
      until (ExitCode <> STILL_ACTIVE) or
      Application.Terminated;
      ShowMessage('Calculator terminated') ;
    end
    else ShowMessage('Error starting Calc!') ;
 end; 
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
195.46.55.*



+62 Profil

icon Re: "Hvatanje" zavrsetka ShellExecute01.09.2011. u 08:48 - pre 153 meseci
Hm...

Zar ne bi trebalo u repeat petlju ubaciti malecki Sleep(5), inace ubi procesor namrtvo (proveriti iz TaskManager-a) ?

Pozz
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.dynamic.sbb.rs.



+395 Profil

icon Re: "Hvatanje" zavrsetka ShellExecute01.09.2011. u 08:52 - pre 153 meseci
Citat:
Rapaic Rajko: Hm...
...inace ubi procesor namrtvo (proveriti iz TaskManager-a) ?
Pozz

Tacno , ali ni Sleep() nije bas elegantno resenje, u tom slucaju bi trebao da koristi WaitForInputIdle koji ne ubija procesor vec samo ceka dok se proces ne zavrsi .

Viva lollapalooza
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: "Hvatanje" zavrsetka ShellExecute01.09.2011. u 16:13 - pre 153 meseci
> Tacno , ali ni Sleep() nije bas elegantno resenje,

Sleep(10) je sasvim pristojno rešenje, nešto bolje je WaitForSingleObject, može se koristiti i gotovo rešenje koje ima JCL, ShellExecAndWait.

> u tom slucaju bi trebao da koristi WaitForInputIdle koji ne ubija procesor vec samo ceka dok se proces ne zavrsi .

WaitForInputIdle nije tome namenjen, on se koristi kada treba sačekati da se proces inicijalizuje i postane dostupan za rad sa korisnikom.
 
Odgovor na temu

Aleksandar Đokić

Član broj: 13478
Poruke: 4793
*.dynamic.isp.telekom.rs.



+638 Profil

icon Re: "Hvatanje" zavrsetka ShellExecute01.09.2011. u 16:17 - pre 153 meseci
ja bih proveravao listu procesa
 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.dynamic.isp.telekom.rs.



+5 Profil

icon Re: "Hvatanje" zavrsetka ShellExecute02.09.2011. u 07:51 - pre 153 meseci
Mislim da nepotrebno trosis vreme i energiju.
Postoje vec neka resenja na netu za koja mislim da tacno odgovaraju tvojim potrebama.

http://www.swissdelphicenter.ch/torry/showcode.php?id=93

ako zelis da se proces koji si pokrenuo nevidi izmeni nShow na SW_HIDE

poz
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: "Hvatanje" zavrsetka ShellExecute

[ Pregleda: 1908 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.