Entwickler-Ecke
Windows API - Prozessnummer und Name
anno - Fr 15.08.08 08:59
Titel: Prozessnummer und Name
Hallo zusammen,
ich wollte mal wissen, wie ich die aktuelle prozessnummer und den namen eines programms herausfinden kann, das ich gerade mit der funktion "ShellExecute" geöffnet habe?
dazu müsste ich dann noch wissen, mit welcher funktion ich einen prozess killen kann.
vielen dank im voraus.
gruß anno
Moderiert von
Gausi: Topic aus VCL (Visual Component Library) verschoben am Fr 15.08.2008 um 09:33
Delete - Fr 15.08.08 09:27
Starte den Thread mit ShellexecuteEx dann bekommst du die ProzessID. Und mit TerminateProcess* kannst du einen Prozess gewaltsam beenden, was aber nicht zu empfehlen ist, da eventuell geladenen DLLs ihre Ressourcen nicht mehr freigeben können bzw. deren Reefernzzähler nicht dekremntiert wird und sie so unnötig von Windows im Speicher gehalten werden. Besser ist es die Nachricht WM_CLOSE an das Hauptfenster der zu beendenden Anwendung zu schicken und sie so sauber zu beenden.
PS: Das hättest du aber auch alles über die Suche gefunden. :?
*) TerminateProcess arbeitet desweiteren asynchron, das heißt die Funktion kehrt zurück bevor der Prozess wirklich beendet wurde. Nach Rückkehr von TerminateProzess musst du also noch mal prüfen, ob der Prozess wirklich beendet wurde.
anno - Do 21.08.08 14:27
hallo,
ich ahbe das ganze mal ausprobiert um damit eine externe "exe" zu starten.
allerdings bekomme ich nie die pid zurück, die ich im taskmanager sehe.
ich bekomme immer nur 3700 zurück.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function test : Boolean; var strDir: String; ShExecInfo : SHELLEXECUTEINFO; strDir := ExtractFilePath("pfad zu der datei");
ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS; ShExecInfo.lpVerb := nil; ShExecInfo.lpFile := PChar(fExePath); ShExecInfo.lpDirectory := nil; ShExecInfo.nShow := SW_HIDE;
Result := ShellExecuteEx(@ShExecInfo);
end; |
gruss anno
Delete - Do 21.08.08 14:56
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button2Click(Sender: TObject); const APP = 'c:\Windows\notepad.exe'; var si: TStartupInfo; pi: TProcessInformation; begin ZeroMemory(@si, sizeof(TStartupInfo)); ZeroMemory(@pi, sizeof(TProcessInformation)); if not CreateProcess(nil, PChar(APP), nil, nil, False, 0, nil, nil, si, pi) then ShowMessage(SysErrorMessage(GetLastError)) else ShowMessage(IntToStr(pi.dwProcessId)); end; |
anno - Mo 25.08.08 11:08
Luckie hat folgendes geschrieben: |
Besser ist es die Nachricht WM_CLOSE an das Hauptfenster der zu beendenden Anwendung zu schicken und sie so sauber zu beenden.
|
wie schıcke ich denn eine nachricht an das hauptfenster?
gruss anno
jaenicke - Mo 25.08.08 12:21
In der KB findest du bei MS eine Beschreibung mit Beispiel (nicht in Delphi, aber es sollte als Beispiel ja reichen):
http://support.microsoft.com/kb/178893/en-us/ ;-)
MS empfiehlt dort die Nachricht nicht nur ans Hauptfenster zu schicken:
| Zitat: |
| Post a WM_CLOSE to all Top-Level windows owned by the process that you want to shut down. |
anno - Mo 25.08.08 12:41
jaenicke hat folgendes geschrieben: |
In der KB findest du bei MS eine Beschreibung mit Beispiel (nicht in Delphi, aber es sollte als Beispiel ja reichen):
http://support.microsoft.com/kb/178893/en-us/ ;-)
MS empfiehlt dort die Nachricht nicht nur ans Hauptfenster zu schicken:
| Zitat: | | Post a WM_CLOSE to all Top-Level windows owned by the process that you want to shut down. |
|
naja ich möchte das mit delphı allerdings an eine externe anwendung schicken (mit Prozess id).
zudem brauche ich noch eine funktion, mit der ich den "exe-namen" eines prozesses prüfen kann.
gruss anno
Delete - Mo 25.08.08 12:50
anno hat folgendes geschrieben: |
| möchte das mit delphı allerdings an eine externe anwendung schicken (mit Prozess id). |
Um nichts anderes geht es auf der verlinkten Seite.
| Zitat: |
| zudem brauche ich noch eine funktion, mit der ich den "exe-namen" eines prozesses prüfen kann. |
Dann mach das doch. Aber falls wir helfen sollen, müsstes du uns noch mitteilen auf WAS die den Namen des Prozess prüfen willst? Korrekte Rechtschreibung, ...
anno - Mo 25.08.08 12:53
Luckie hat folgendes geschrieben: |
anno hat folgendes geschrieben: | | möchte das mit delphı allerdings an eine externe anwendung schicken (mit Prozess id). |
Um nichts anderes geht es auf der verlinkten Seite.
| Zitat: | | zudem brauche ich noch eine funktion, mit der ich den "exe-namen" eines prozesses prüfen kann. |
Dann mach das doch. Aber falls wir helfen sollen, müsstes du uns noch mitteilen auf WAS die den Namen des Prozess prüfen willst? Korrekte Rechtschreibung, ... |
nein ich will nicht dıe rechtsschreıbung prüfen.
nur dass ich eine abhaengıgkeıt zwıschen der pıd und dem prozessname prüfen kann, dass ıch auch wırklıch den rıchtıgen prozess beende.
PS: na also nach delphı sıeht der code aber mal wırklıch nicht aus.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!