Autor |
Beitrag |
LuMa86
      
Beiträge: 76
|
Verfasst: So 09.09.12 18:59
Hallo Delphi-Gemeinde,
mit folgendem Code beende ich einen Task:
Delphi-Quelltext 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:
| function KillTask(ExeFileName: string): Integer; const PROCESS_TERMINATE = $0001; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin Result := 0; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while Integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end;
KillTask('RadStudio'); |
Wie kann ich den jetzt zwischen 2 Tasks, die den selben Namen haben (oder eben die slebe Anwendung sie 2x läuft) auseinanderhalten? Angenommen Firefox/IExplorer ist 2x geöffnet. Wie kann ich dann einen bestimmten beenden?
Danke,
Lukas
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: So 09.09.12 19:04
Über die Prozeß-Identifikationsnummer ("ProcID" oder "Process-ID" oder so ähnlich). Die ist für jeden Prozeß einmalig, auch wenn dieselbe Exe-Datei beliebig oft gestartet wird und mithin "gleichnamige" Prozesse erzeugt.
Zuletzt bearbeitet von Delphi-Laie am Di 11.09.12 16:44, insgesamt 1-mal bearbeitet
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 09.09.12 21:31
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: So 09.09.12 22:04
Rein aus Ineresse: Geht es darum, ein selbst geschriebenes Programm abzuschiessen?
Oder handelt es sich hierbei um eine Art "Notlösung" weil sich Firefox, Iexplore oder ähnliches seltsamerweise immer doppelt öffnet?
Wenn letzteres: Wäre es nicht sinnvoller, den Grund für das Doppel-Öffnen zu beseitigen?
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
LuMa86 
      
Beiträge: 76
|
Verfasst: Di 11.09.12 15:50
@Horschdware: Ich denke du wilslt auf einen Mehrfachstart anspielen  Nein, das habe ich bereits mit dem Mutex erledigt.
Das mit der ID hört sich gut an, habe hier auch einen Code, der via ID den Task beenden kann (KillTask(GetProcessID('blabla'))) oder so. Aber das ist ja im Prinzip das selbe, wie kann ich den die Tasks nun unterscheiden?
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 11.09.12 16:23
Delphi-Laie hat folgendes geschrieben : | Über die Prozeß-Identifikationsnummer ("ProcID oder "Process-ID" oder so ähnlich). Die ist für jeden Prozeß einmalig, auch wenn dieselbe Exe-Datei beliebig oft gestartet wird und mithin "gleichnamige" Prozesse erzeugt. |
_________________ There are 10 types of people - those who understand binary and those who don´t.
Für diesen Beitrag haben gedankt: Delphi-Laie
|
|
LuMa86 
      
Beiträge: 76
|
Verfasst: Di 11.09.12 22:37
Ja Narses, wenn es so einfach wäre  Die Prozess ID ist einmalig, auch bei gleichnahmigen Exe-Dateien... Das klingt so einfach  Ich melde mich nochmal, wenn es was herausgefunden habe, weie ich das mit der ID lösen kann 
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Di 11.09.12 22:48
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Mi 12.09.12 22:28
LuMa86 hat folgendes geschrieben : | Nein, das habe ich bereits mit dem Mutex erledigt. |
Das klingt für mich so, als ob es bei der Frage eigentlich darum geht, einen Mehrfachstart der eigenen Anwendung zu verhindern.
Hier findest Du Anregungen: delphi.about.com/od/...lapi/l/aa100703a.htm
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Mi 12.09.12 22:42
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Wieso denn, genau das wurde doch schon mit dem Mutex verhindert?!
Es wird dem Eröffnungsschreiberling nichts anderes übrigbleiben, als hier mindestens soviele Informationen wie nötig abzugeben - daß dem (noch) nicht so ist, ist am Rätselraten und den Vermutungen ablesbar. Schließlich will er ja etwas.
|
|
LuMa86 
      
Beiträge: 76
|
Verfasst: Sa 22.09.12 19:51
Sorry, wenn ich mich jetzt erst wieder melde, ich beschreibe das nochmal genau:
1. NEIN! Den Mehrfachstart meiner Anwendung verhindere ich mit Mutex
2. Mein Ziel ist es zwischen 2 Gleichnahmigen Prozessen (oder 2x dem selben Prozess) zu unterscheiden. Aber ich verstehe das mit der ProcessID nicht. Wie ich die bekomme ist mir klar, aber mal angenommen ich habe 2x Firefox. Jetzt ist der erste Prozess im Taskmanager den Prozess den ich behalten möchte, und der 2. Prozess auch Firefox, den will ich aber beenden. Jetzt killt er ja bei meiner Methode den zuerst gefundenen. Wie bring ich aber den 2. um die Ecke, ohne den 1. auch platt zu machen?
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Sa 22.09.12 21:30
Dann beendest Du eben den zweiten oder einen sonstigen Fund (von außen, mithin "gewaltsam").
Du kannst Dir auch ein Programm schreiben, das alle Prozeßschappschußfunde mit gleichem Namen ("firefox.exe") in irgendein Ausgabelement mitsamt der zugehörigen Prozeßidentifikationsnummer schreibt und Du dann den Dir genehmen Fund per Mausklick auswählst und "abschießt". Der Möglichkeiten gibt es viele.
Der Prozeßschnappschuß, enumerierend angewandt, schreibt in eine Datenstruktur, die auch die ProcID enthält. Das sich abzuschauen, rate ich zu Luckies "WinInfo". Auch mein Programm "Prozesse" (in verschiedenen Versionen für verschiedene Delphi-/Freepascalcompiler, auch hier im Forum zu finden) schaute sich viel von Luckies Programm ab, es kann auch Prozesse gewaltsam beenden.
Warum nimmst Du aber nicht einfach den Taskmanager für diese Zwecke?
|
|