| Autor |
Beitrag |
DiamondDog
      
Beiträge: 460
|
Verfasst: Mo 06.10.08 13:07
Hallo Leute,
ich hab da folgenden Code gefunden:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| uses tlhelp32, ShellAPI;
function GetProcessID(Exename: string): DWORD; var hProcSnap: THandle; pe32: TProcessEntry32; begin result := 0; hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0); if hProcSnap <> INVALID_HANDLE_VALUE then begin pe32.dwSize := SizeOf(ProcessEntry32); if Process32First(hProcSnap, pe32) = true then begin while Process32Next(hProcSnap, pe32) = true do begin if pos(Exename, pe32.szExeFile) <> 0 then result := pe32.th32ProcessID; end; end; CloseHandle(hProcSnap); end; end;
function GetProcessHandleFromID(ID: DWORD): THandle; begin result := OpenProcess(SYNCHRONIZE, False, ID); CloseHandle(result); end;
procedure TForm1.Button1Click(Sender: TObject); var hProcess: THandle; wf: DWORD; begin bClose := False; Button1.Enabled := False; while bClose = False do begin hProcess := GetProcessHandleFromID(GetProcessID('notepad.exe')); if hProcess = 0 then Label1.Caption := 'Notepad läuft nicht' else Label1.Caption := 'Notepad läuft'; Application.HandleMessage; end; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin bClose := True; end; | gebe ich jetzt anstelle von notepad.exe den laufenden GameMon.des an,
wird diese Prozess mir aber nicht angezeigt.
Weiß jemand wieso und wie ich es beheben kann?
Danke schon mal fürs Helfen.
Mfg Dog Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Mo 06.10.2008 um 17:43
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.10.08 13:23
Taucht er denn im Taskmanager auf?
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: Mo 06.10.08 13:25
jaenicke hat folgendes geschrieben : | | Taucht er denn im Taskmanager auf? |
Ja im Taskmanager steht er drin.
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.10.08 13:35
Was mich irritiert: Wozu GetProcessHandleFromID? Du hast doch schon die ID gefunden, und dann muss er ja laufen, wozu also den dann noch öffnen?
Um welchen Prozess geht es denn?
Und dann ist da noch ein ziemlich heftiger Fehler im Code: DiamondDog hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3:
| if Process32First(hProcSnap, pe32) = true then begin while Process32Next(hProcSnap, pe32) = true do | |
Das ist falsch, der Vergleich mit true darf da nicht stehen, sonst brauchst du dich nicht wundern, wenn es nicht immer funktioniert. Richtig ist: Delphi-Quelltext 1: 2: 3:
| if Process32First(hProcSnap, pe32) then begin while Process32Next(hProcSnap, pe32) do | Erklärungen:
www.michael-puff.de/...Wahrheitswerte.shtml
und eine etwas längere Diskussion mit genaueren Erläuterungen darüber:
www.delphi-forum.de/...kt+mit+if_83487.html
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: Mo 06.10.08 13:48
Auch das entfernen von = True hat mich nicht weiter gebracht.
Er kann es immer noch nicht finden.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 06.10.08 13:59
Probier mal ENUMPROCESSES.
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: Mo 06.10.08 14:04
Hab was gefunden womit es geht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Button1Click(Sender: TObject); begin hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnap <> INVALID_HANDLE_VALUE) then begin ProcEntry.dwSize := SizeOf(ProcessEntry32); if (Process32First(hSnap, ProcEntry)) then begin s := ProcEntry.szExeFile; while Process32Next(hSnap, ProcEntry) do begin s := ProcEntry.szExeFile; if ExtractFileName(s) = 'GameMon.des' then ShowMessage('GameMon.des gefunden'); end; end; end; CloseHandle(hSnap); end; | jetzt müst ich nur noch wissen wie ich mir angezeigen lassen kann, wenn der Prozes nicht gefunden wurde.
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.10.08 14:13
Das ist ja das selbe wie der Code vorhin, nur eben ohne das von mir ja angesprochene GetProcessHandleFromID...
Versuch deinen alten Code doch einfach mal ohne...
Wobei mir mal so auffällt: Wird der von Process32First gefundene Prozess bei den beiden Codes eigentlich benutzt? Ich würde sagen nein...
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: Mo 06.10.08 22:04
Ich erklär mal kurz was ich vor habe:
Also ich mache eine Liste von bestimmten Prozessen und diese soll mit den laufen den verglichen werden.
Das dürfte ja eigendlich nicht so schwer sein das erste geht auch mit *.exe aber leidermit der GameMon.des die übersieht er leider immer.
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.10.08 22:23
Probier mal dieses Programm aus, wenn es funktioniert, hatte ich in meinem vorletzten Beitrag Recht, wenn nicht wüsste ich auch grad nicht warum es nicht geht.
Einloggen, um Attachments anzusehen!
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: Mo 06.10.08 22:38
Ja damit funktioniert es.
Wollte es eh nicht mehr über die ProzessID machen sondern abfragen was alles läuft und dann alles mit den Programmen die ich in meiner Liste habe vergleichen.
Sorry in so etwas schwirigen sachen bin ich noch Anfänger, deswegen versteh ich nit immer alles gleich auf Anhieb.
Was genau hast bei deinem Prog den jetzt alles geändert?
Moderiert von Narses: überflüssige Leerzeilen/Umbrüche entfernt
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.10.08 22:42
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: Di 07.10.08 19:26
Super @ jaenicke so funktioniert es so wie es soll.
1000 Dank.
|
|