![]() |
Laufende Prozesse abfragen - geht, geht nicht
Moin Moin.
Bei der Installation von Spieldateien muss ich vor dieser Installation prüfen, ob das dazugehörige Spiel läuft. Dazu verwende ich die nachstehende Prozedur um die laufenden Prozesse aufzulisten.
Delphi-Quellcode:
... und die folgende schlichte Abfrage um dann eben festzstellen, ob oder ob nicht.
uses TlHelp32;
procedure GetProcessList(const aProcessList: TStrings); var Snap: THandle; ProcessE: TProcessEntry32; begin aProcessList.Clear; Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); try ProcessE.dwSize := SizeOf(ProcessE); if Process32First(Snap, ProcessE) then Repeat aProcessList.Add(ProcessE.szExeFile); Until not Process32Next(Snap, ProcessE) else RaiseLastOSError; finally CloseHandle(Snap); end; end;
Delphi-Quellcode:
Die Liste wird anstandslos erstellt und enthält auch - wenn das Spiel denn läuft - den Namen der laufenden Exedatei.
Prozesse:=TStringlist.Create;
GetProcessList(Prozesse); For I:= 0 to Prozesse.Count - 1 do begin If Prozesse.Strings[I] = ExeNameString then IsActive := 1; end; Tja. Mal geht es, mal geht es nicht. 'Emperor.exe' geht nicht, 'CaesarIV.exe' geht - mal als Beispiel. Was kann das sein? creehawk |
AW: Laufende Prozesse abfragen - geht, geht nicht
Schon mal geschaut ob 'Emperor.exe' überhaupt als Prozess gelistet ist?
Mitunter sind es irgendwelche launscher welche den Prozess starten diesen aber nach dem start auch wieder zerstören. Mal den Process Explorer von Sysinternals verwenden um zu prüfen ob die Prozesse dort aufgelistet werden. Bzw. prüfen was da vorgeschaltet wird. gruss |
AW: Laufende Prozesse abfragen - geht, geht nicht
Wenn die Liste das Programm enthält, dann schlägt wohl der String-Vergleich fehl.
Spontan fallen mir diese Klassiker ein: - Case-Sensitive - Leading/Trailing Blanks - "unsichtbare" Zeichen |
AW: Laufende Prozesse abfragen - geht, geht nicht
Was heißt denn "geht nicht"? Ist das Spiel nicht in der Liste, oder findet Dein Vergleich den Eintrag nicht?
|
AW: Laufende Prozesse abfragen - geht, geht nicht
Also Case Sensitve haben ich schon exerziert, Uppercase und so - keine Reaktion.
Die Prozesse sind laut einem externen Programm vorhanden, ich kann ausserdem über Windows auch in das Spiel einschalten, es läuft definitiv. Unsichtbare Zeichen? Wie kann ich das rauskriegen? Edit: Der Vergleich geht nicht, das Spiel (also die Exe) ist in der Liste.... creehawk |
AW: Laufende Prozesse abfragen - geht, geht nicht
Du verlässt dich auf externe Programme? :wink:
Deine Prozessliste ist eine Stringlist. Mache einfach ein SaveToFile und schau dir genau an, was dort enthalten ist. Dann kannst du vermutlich auch "unsichtbare" Zeichen sehen. Notfalls mit einem Hex-Editor. |
AW: Laufende Prozesse abfragen - geht, geht nicht
Zitat:
Und mit deinem String vergleichen. gruss |
AW: Laufende Prozesse abfragen - geht, geht nicht
Delphi-Quellcode:
Prozesse:=TStringlist.Create;
GetProcessList(Prozesse); For I:= 0 to Prozesse.Count - 1 do begin OutputDebugString(PChar('Prozess: ' + Prozesse.Strings[I] + ' - ' + ExeNameString)); // was erscheint denn im Eventlog? If Prozesse.Strings[I] = ExeNameString then IsActive := 1; end; |
AW: Laufende Prozesse abfragen - geht, geht nicht
Mal aus der hohlen Hand:
Delphi-Quellcode:
Prozesse := TStringlist.Create;
try GetProcessList(Prozesse); For I := 0 to Prozesse.Count - 1 do If AnsiSameText(Trim(Prozesse[I]), ExeNameString) then begin IsActive := 1; break; end; finally Prozesse.Free; end; |
AW: Laufende Prozesse abfragen - geht, geht nicht
Ich würde mir auch mal die TStringList nehmen und mit dem Task-Manager auf 32/64 bit bzw. elevated/non-elevated vergleichen, ich meine mich zu erinnern, dass es da Einschränkungen gab.
Ansonsten, solange die Liste der Spiele überschaubar bleibt, würde ich eher z.B. schauen, ob die Spiele einen eindeutig benannten Mutex verwenden, das dürfte schneller gehen als CreateToolhelp32Snapshot. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz