Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows Prozess killen (https://www.delphipraxis.net/8378-windows-prozess-killen.html)

Budda 3. Sep 2003 13:17


Windows Prozess killen
 
Hallo,

habe mit Hilfe des Codes aus diesem Thread eine Liste aller laufenden Prozesse bzw. die Dateinamen like test.exe.

Wie kann ich nun bestimmte Prozesse killen ?
Also ich möchte z.B. alle Prozesse der test.exe killen ?

Und dann hab ich noch ne NebenFrage, welches Buch könntet ihr mir für den Delphi Einstieg empfehlen ?

Gruß
Budda

Chewie 3. Sep 2003 13:23

Re: Windows Prozess killen
 
Um einen Prozess zu killen, brauchst die ProzessID und die Funktion KillProcess.

Budda 3. Sep 2003 13:40

Re: Windows Prozess killen
 
Hallo,

gibt es denn eine möglichkeit Anhand der test.exe die nzugehörige PID zu bekommen ?

Gruß
Budda

Chewie 3. Sep 2003 14:03

Re: Windows Prozess killen
 
Zeig mal bitte den Code, wie du an alle Prozesse rankommst. Ich hab keine große Lust, mich durch 3 Seiten Threads durchzuwühlen.

Luckie 3. Sep 2003 14:06

Re: Windows Prozess killen
 
Zitat:

Zitat von Chewie
Um einen Prozess zu killen, brauchst die ProzessID und die Funktion KillProcess.

Funktionn KillProcesses? :shock: Wo kommt die denn her?

@Budda: http://www.delphipraxis.net/internal...ect.php?t=2275

Chewie 3. Sep 2003 14:12

Re: Windows Prozess killen
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Chewie
Um einen Prozess zu killen, brauchst die ProzessID und die Funktion KillProcess.

Funktionn KillProcesses? :shock: Wo kommt die denn her?

:duck: Mist, ich hab gerade an Linux gedacht (kill PID). :oops:

Edit: OK, hier ist sie:
Delphi-Quellcode:
function KillProcess(PID: DWord): Bool;
var
  hProcess: THandle;
begin
  hProcess := OpenProcess(PROCESS_TERMINATE, False, PID);
  Result := TerminateProcess(hProcess, 0);
end;

:mrgreen:

Budda 3. Sep 2003 15:39

Re: Windows Prozess killen
 
Hallo,

hab mal Luckie's Code genommen der auch so seinen Zweck erfüllt.
Danke nochmal.

Allerdings habe ich jetzt probiert das zu automatisieren, dazu habe ich testweise folgende funktion auf einen Button gelegt:
Delphi-Quellcode:
  A := Listbox1.Count;
  for I:=0 to A do
    if Listbox1.Items.Strings[I] = 'test.exe' then
      KillProcess(GetProcessID(Listbox1.Items.Strings[Listbox1.ItemIndex]))
    else
end;
Allerdings hab ich das Problem das bevor er zum killen des Prozesses kommt er die Message Item Index Out auf Bounds.

Weiss jemand wo da der Fehler is ?

Gruß
Budda

Matze 3. Sep 2003 15:44

Re: Windows Prozess killen
 
Muss es nicht so heißen:

Delphi-Quellcode:
A := Listbox1.Count;
  for I:=0 to A do
    if Listbox1.Items.Strings[I] = 'test.exe' then
      KillProcess(GetProcessID(Listbox1.Items.Strings[I]))
    else
end;

Matze 3. Sep 2003 15:50

Re: Windows Prozess killen
 
Du musst aber aufpassen:

Lösche dann das:
Delphi-Quellcode:
{ and refresh listbox contend }
Form1.Button1Click(Form1);
aus der "Kill-Prozess" und setzt es in diese beiden proceduren wieder ein:

Delphi-Quellcode:
//Kill den ausgewählten Prozess
procedure TForm1.Button2Click(Sender: TObject);
begin
  KillProcess(GetProcessID(Listbox1.Items.Strings[Listbox1.ItemIndex]));
 
  { and refresh listbox contend }
  Form1.Button1Click(Form1);
end;

//Killt alle test.exe
procedure TForm1.Button3Click(Sender: TObject);
var i: integer;
begin
  for I:=0 to ListBox1.Count-1 do
    if Listbox1.Items.Strings[i] = 'test.exe' then
    KillProcess(GetProcessID(Listbox1.Items.Strings[i]));

  { and refresh listbox contend }
  Button1Click(Form1);
end;
Sonst kommt die Fehlermeldung: ListenIndex überschreitet das Mximum. Oder so ähnlich. ;)

Budda 4. Sep 2003 07:24

Re: Windows Prozess killen
 
Zitat:

Zitat von Matze
Muss es nicht so heißen:

Delphi-Quellcode:
A := Listbox1.Count;
  for I:=0 to A do
    if Listbox1.Items.Strings[I] = 'test.exe' then
      KillProcess(GetProcessID(Listbox1.Items.Strings[I]))
    else
end;

Ah jau, das hatte ich übersehen, allerdings habe ich das Problem das er den prozess zwar automatisch beendet allerdings kommt nach dem beenden der Fehler "List Index out of Bounds".

Wer ne Idee was das ist ?

Tyrael Y. 4. Sep 2003 15:27

Re: Windows Prozess killen
 
ähm, :?

ich wäre mit TerminateProcess vorsichtig...

sobald du TerminateProcess sendest wird der Process SOFORT gekillt...


... es gibt ne bessere Variante die den Prozess noch seine Aufgaben zu Ende bringen lässt...

fällt mir grad nicht so ein , aber es geht mit einem ExitCode

ich guck nochmal nach dann sag ich Bescheid

Luckie 4. Sep 2003 15:31

Re: Windows Prozess killen
 
Zitat:

Zitat von Tyrael Y.
ich wäre mit TerminateProcess vorsichtig...

sobald du TerminateProcess sendest wird der Process SOFORT gekillt...

Nun ja, ich dneke, dass ist auch Sinn und Zweck der Aktion oder?
Zitat:

... es gibt ne bessere Variante die den Prozess noch seine Aufgaben zu Ende bringen lässt...
fällt mir grad nicht so ein , aber es geht mit einem ExitCode
ich guck nochmal nach dann sag ich Bescheid
Ich bin gespannt....

Budda 4. Sep 2003 15:32

Re: Windows Prozess killen
 
Das mit KillProcess klappt schon da das ein Prozess ist der des öfteren hängenbleibt und dadurch lässt sich Windows nicht mehr beenden.

Allerdings bekomm ich noch den oben beschriebenen Fehler. Und wenn ich das ganze nun daran koppeln will das er das automatisch macht wenn man Windows beendet passiert gar nichts mehr. So siehts aus:
Delphi-Quellcode:
procedure TForm1.WMQueryEndSession(var M : TWMQueryEndSession);
var
  a : integer;
  i : integer;
begin
  inherited;
  Listbox1.Clear;
  GetProcessList(Listbox1.Items);
  for I:=0 to A do
    if Listbox1.Items.Strings[I] = 'Genesis.EXE' then
      KillProcess(GetProcessID(Listbox1.Items.Strings[I]));
end;

Tyrael Y. 4. Sep 2003 15:45

Re: Windows Prozess killen
 
Zitat:

Ich bin gespannt....
Hol dir ein Handle und dann...

GetExitCodeProcess(Handle, ExitCode);
ExitProcess(ExitCode);


so hat das bei mir super geklappt wenn der Prozess noch Aufgaben
hatte die er noch nicht erledigt hatte


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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