AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Laufende Prozesse abfragen - geht, geht nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Laufende Prozesse abfragen - geht, geht nicht

Ein Thema von creehawk · begonnen am 9. Jan 2018 · letzter Beitrag vom 10. Jan 2018
Antwort Antwort
Seite 1 von 2  1 2      
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#1

Laufende Prozesse abfragen - geht, geht nicht

  Alt 9. Jan 2018, 11:32
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:
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;
... und die folgende schlichte Abfrage um dann eben festzstellen, ob oder ob nicht.

Delphi-Quellcode:
Prozesse:=TStringlist.Create;
GetProcessList(Prozesse);
For I:= 0 to Prozesse.Count - 1 do
   begin
      If Prozesse.Strings[I] = ExeNameString then IsActive := 1;
   end;
Die Liste wird anstandslos erstellt und enthält auch - wenn das Spiel denn läuft - den Namen der laufenden Exedatei.

Tja. Mal geht es, mal geht es nicht. 'Emperor.exe' geht nicht, 'CaesarIV.exe' geht - mal als Beispiel.

Was kann das sein?

creehawk
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Laufende Prozesse abfragen - geht, geht nicht

  Alt 9. Jan 2018, 11:38
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

Geändert von EWeiss ( 9. Jan 2018 um 11:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Laufende Prozesse abfragen - geht, geht nicht

  Alt 9. Jan 2018, 11:39
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
Peter
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: Laufende Prozesse abfragen - geht, geht nicht

  Alt 9. Jan 2018, 11:40
Was heißt denn "geht nicht"? Ist das Spiel nicht in der Liste, oder findet Dein Vergleich den Eintrag nicht?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Laufende Prozesse abfragen - geht, geht nicht

  Alt 9. Jan 2018, 11:43
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

Geändert von creehawk ( 9. Jan 2018 um 11:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Laufende Prozesse abfragen - geht, geht nicht

  Alt 9. Jan 2018, 11:46
Du verlässt dich auf externe Programme?
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.
Peter
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Laufende Prozesse abfragen - geht, geht nicht

  Alt 9. Jan 2018, 11:49
Du verlässt dich auf externe Programme?
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.
Mal den Process Explorer von Sysinternals verwenden um zu prüfen ob die Prozesse dort aufgelistet werden.
Und mit deinem String vergleichen.

gruss
  Mit Zitat antworten Zitat
TiGü
Online

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Laufende Prozesse abfragen - geht, geht nicht

  Alt 9. Jan 2018, 11:52
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: Laufende Prozesse abfragen - geht, geht nicht

  Alt 9. Jan 2018, 12:14
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Laufende Prozesse abfragen - geht, geht nicht

  Alt 9. Jan 2018, 13:56
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.
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