Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Abfragen ob ein Prozess läuft (https://www.delphipraxis.net/53953-abfragen-ob-ein-prozess-laeuft.html)

RedDust 26. Sep 2005 08:34


Abfragen ob ein Prozess läuft
 
Hi @ all,

Ich schreibe gerade an einem Tool das einen bzw. mehreren Prozessen sucht und wenn es dann eins gefunden hat etwas macht. Leider habe ich in der Forumsuche nichts gefunden also hoffe ich das ihr mir vll weiterhelfen könnt.

Mfg,

Mario

chaosben 26. Sep 2005 08:51

Re: Abfragen ob ein Prozess läuft
 
Hi!

Sag uns doch bitte, an was du den Prozess erkennen willst. An der exe oder an der Prozess-ID? Oder an etwas ganz anderem?

Baeuerle 26. Sep 2005 08:52

Re: Abfragen ob ein Prozess läuft
 
Hi,

mit dieser procedure kannst du die Prozesse aktiven auflisten:

Delphi-Quellcode:
procedure ListProcess(lb: TListbox);
var hProcSnap: THandle;
    pe32: TProcessEntry32;
begin
hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
if hProcSnap = INVALID_HANDLE_VALUE then exit;
pe32.dwSize := SizeOf(ProcessEntry32);
if Process32First(hProcSnap, pe32) = true then
 while Process32Next(hProcSnap, pe32) = true do
  begin
  // Prozess hinzufügen
  lb.Items.Add(pe32.szExeFile);
  end;
CloseHandle(hProcSnap);
end;

RedDust 26. Sep 2005 08:54

Re: Abfragen ob ein Prozess läuft
 
Zitat:

Zitat von chaosben
Hi!

Sag uns doch bitte, an was du den Prozess erkennen willst. An der exe oder an der Prozess-ID? Oder an etwas ganz anderem?

An einer exe.

Folgendes: Ich starte ein Spiel und das Tool soll mir sagen ob das spiel läuft oder nicht.

EDIT:

Zitat:

Zitat von Baeuerle
Hi,

mit dieser procedure kannst du die Prozesse aktiven auflisten:

Delphi-Quellcode:
procedure ListProcess(lb: TListbox);
var hProcSnap: THandle;
    pe32: TProcessEntry32;
begin
hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
if hProcSnap = INVALID_HANDLE_VALUE then exit;
pe32.dwSize := SizeOf(ProcessEntry32);
if Process32First(hProcSnap, pe32) = true then
 while Process32Next(hProcSnap, pe32) = true do
  begin
  // Prozess hinzufügen
  lb.Items.Add(pe32.szExeFile);
  end;
CloseHandle(hProcSnap);
end;

Danke, genau das hab' ich gebraucht ^^

RedDust 26. Sep 2005 09:00

Re: Abfragen ob ein Prozess läuft
 
ehmm, Kommando zurück. Muss ich noch eine Unit einbinden? Der Compiler gibt mir 3 Fehlermeldungen.

Code:
[Error] Unit1.pas(31): Undeclared identifier: 'TProcessEntry32'
[Error] Unit1.pas(33): Undeclared identifier: 'CreateToolHelp32SnapShot'
[Error] Unit1.pas(33): Undeclared identifier: 'TH32CS_SNAPPROCESS'

Baeuerle 26. Sep 2005 09:10

Re: Abfragen ob ein Prozess läuft
 
Yep,

und zwar die Unit "tlhelp32".

RedDust 26. Sep 2005 09:25

Re: Abfragen ob ein Prozess läuft
 
OK, jetzt funzt es, thx. :thumb:

Olli 26. Sep 2005 09:27

Re: Abfragen ob ein Prozess läuft
 
Mit Baeuerle's Routine wirst du nicht viel Erfolg haben, da es keine sichere Methode gibt um von einem Prozeß auf ein Image zu schließen (dazu sind die verwendeten Puffer zu klein - und zwar bereits innerhalb der Native API).

Arnulf 26. Sep 2005 09:40

Re: Abfragen ob ein Prozess läuft
 
ja sobald du zwei prozesse mit gleichem namen laufen hast, ist das hinfällig.

Arnulf

Olli 26. Sep 2005 09:51

Re: Abfragen ob ein Prozess läuft
 
Zitat:

Zitat von Arnulf
ja sobald du zwei prozesse mit gleichem namen laufen hast, ist das hinfällig.

Ich meine nicht nur mehrere Instanzen, was ja nur insofern ein Problem ist, daß man alle Instanzen auflisten muß - vielmehr geht es mir um die Puffer.

Beispiel: ich habe den Apache und den Apache Monitor laufen. Das Modul letzteren Programms heißt ApacheMonitor.exe, sowohl die ToolHelp-API als auch der TaskManager (der direkt die Native APIs benutzt) geben aber folgendes aus: "ApacheMonitor.e".

Das Problem ist übertragbar auf andere lange Dateinamen und auch auf andere Systeme. Kurz es ist nachvollziehbar. Ein einfacher Vergleich mit "ApacheMonitor.exe" würde hier also fehlschlagen, obwohl der Prozeß eindeutig auf exakt diesem Modul basiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz