![]() |
Parent Prozess ID ermitteln
Hallo zusammen,
ich schreibe gerade an einem Delphi-Programm für Win32 und benötige in meinem Programm die aktuelle Prozess-ID als auch die Prozess-ID des Programms welches mein Programm gestartet hat. Die aktuelle Prozess-ID bekomme ich ja einfach durch GetCurrentProcessId. Nur leider finde ich keine Möglichkeit die Parent-Prozess-ID zu ermitteln. Kann mit hierbei jemand helfen oder zumindest einen Ansatzpunkt geben. Ich tappe hier völlig im dunkeln. Viele Grüße, Christian |
Re: Parent Prozess ID ermitteln
Strate deinen Prozess mit
![]() |
Re: Parent Prozess ID ermitteln
Hi,
danke für die Antwort, doch leider habe ich auf das starten keinen einfluss. Mein Programm wird von einem beliebigem Programm heraus gestartet und ich muss nun herausfinden welche Prozess-ID der Aufrufer hat. Viele Grüße, Christian |
Re: Parent Prozess ID ermitteln
das funktioniert wohl nur mit den tool help apis:
Delphi-Quellcode:
...
uses tlhelp32; ... function GetParentProcessID: integer; var h: THandle; rec: TProcessEntry32W; begin Result := 0; h := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); try rec.dwSize := sizeof(rec); // initialisierung if Process32FirstW(h, rec) then repeat if rec.th32ProcessID = GetCurrentProcessID then begin Result := rec.th32ParentProcessID; Break; end; until not Process32NextW(h, rec); finally CloseHandle(h); end; end; |
Re: Parent Prozess ID ermitteln
Und noch eine Version:
Delphi-Quellcode:
@mpth: API Funktionen lösen keine Exceptions aus. Das try-finally Konstrukt ist also überflüssig. Und ohne zu prüfen, ob du ein gültiges Handle hast, ist es nicht ratsam in die Schleife zu gehen. Desweiteren vermisse ich bei dir eine Fehlerbehandlung. Ich weiß immer gerne, warum etwas nicht funktioniert hat, wenn ein Fehler aufgetreten ist. Meine Funktion liefert den letzten Systemfehler des Pozesses zurück, den man dann auswerten kann.
uses
tlhelp32; function GetParentID(ID: DWORD; var IDParent: DWORD): DWORD; var hSnapShot: THandle; pe32: TProcessEntry32; begin hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if hSnapShot <> 0 then begin pe32.dwSize := sizeof(TProcessEntry32); if Process32First(hSnapShot, pe32) then begin repeat if pe32.th32ProcessID = GetCurrentProcessId then begin IDParent := pe32.th32ParentProcessID; break; end; until Process32Next(hSnapShot, pe32) = False; end; CloseHandle(hSnapShot); end; result := GetLastError; end; procedure TForm1.Button1Click(Sender: TObject); var ParentID: DWORD; dwReturn: DWORD; begin dwReturn := GetParentID(GetCurrentProcessId, ParentID); if dwReturn = 0 then ShowMessage(IntToStr(ParentID)) else ShowMessage(SysErrorMessage(dwReturn)); end; |
Re: Parent Prozess ID ermitteln
Zitat:
Zitat:
Zitat:
|
Re: Parent Prozess ID ermitteln
Hat ein else gefehlt:
Delphi-Quellcode:
function GetParentID(ID: DWORD; var IDParent: DWORD): DWORD;
var hSnapShot: THandle; pe32: TProcessEntry32; begin result := 0; hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if hSnapShot <> 0 then begin pe32.dwSize := sizeof(TProcessEntry32); if Process32First(hSnapShot, pe32) then begin repeat if pe32.th32ProcessID = GetCurrentProcessId then begin IDParent := pe32.th32ParentProcessID; break; end; until Process32Next(hSnapShot, pe32) = False; end; CloseHandle(hSnapShot); end else result := GetLastError; end; |
Re: Parent Prozess ID ermitteln
Hallo zusammen,
super! Beide Prozeduren funktionieren einwandfrei und sind genau das was ich gesucht habe. Danke euch, Christian |
Re: Parent Prozess ID ermitteln
Zitat:
Den Rest deiner Bemerkung finde ich da deutlich sinnvoller ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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