Jak sprawdzic czy proces działa

0

uruchamiam z kodu jakic plik *.bat w niewidzialnym oknie. chce sie dowiedziec jak sprawdzic czy zadanie juz sie wykonalo i zakończyl sie ten proces. Pozdrawiam

0
  procedure procesy;
  var
  _HWND : THandle;
  Proc : TProcessEntry32;
begin
  _HWND := CreateToolHelp32SnapShot(TH32CS_SNAPALL,0);

  Proc.dwSize:=SizeOf(Proc); // okresl rozmiar struktory

  if Integer(Process32First(_HWND, Proc)) <> 0 then
  repeat
  ListBox1.Items.Add(Proc.szExeFile); // dodaje sciezkie pliku do ListBox'a
  until Integer(Process32Next(_HWND, Proc)) = 0; // dopoki wartosc nie osiagnie 0

  CloseHandle(_HWND);
end;
end;

procedura wyswietlajaca procesy - mozna to przerobic na sprawdzenie czy proces dany istnieje :) Czyli:

if proc.szexefile='proces.exe' then begin
instrukcja wykonania
end;
  • pisane na szybko
0
function ExistsProcess(nazwa : string) : boolean;
var
 i, Found : Integer;
begin
 for i := 0 to FormForce.Procesy.Items.Count -1 do // analizuj wszystkie pozycje
   begin
     Found := Pos(nazwa, FormForce.Procesy.Items[i]); // szukaj ciagu znakow
     if (Found > 0) and (FormForce.Procesy.Items[i][1] = nazwa[1]) then
       begin
         FormForce.RichEdit.SelAttributes.Color := clRed;
         FormForce.RichEdit.SelText             := '   STOP -> Proces nadal istnieje !'+ #13#10;
         Result := True;
         Break; // i przerwij dzialanie petli
       end
     else
         Result := False;
   end;
Result := False;
end;
0

opi: po pierwsze ta funkcja zawsze zwróci false, po drugie - co to jest formforce.procesy? zdaje się zapomniałeś wkleić kod wypełniający tą tablicę.

0

a co to jest : TProcessEntry32; ???

0

zapomnialem napisac ze w uses trzeba dodac TlHelp32

0

Witam
Tu masz przykład, co prawda w C++ ale bez problemu można przetlumaczyć na Delphi.
http://www.programuj.com/pytanie.php?p=ps4
Nie sprawdzilem też, czy działa z plikami .bat
Pozdrawiam</url>

0
Opi napisał(a)
<delphi> do uses należy dodać: TlHelp32;

FormForce - nazwa formy
Procesy - ListBox
FormForce.RichEdit - Tutaj wypisanywany jest raport (można usunąć)

U mnie działa, chociaż kompilator zwraca uwagę na każde miejsce w funkcji gdzie jest Result := True/False;

// to spoko, ale - gdzie masz wypełnianie listboksa danymi? - Ł

0
lofix napisał(a)

// to spoko, ale - gdzie masz wypełnianie listboksa danymi? - Ł

FormForce to nie tablica lecz nazwa formy. A wpisy w TRichEdit spełniają rolę raportu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1