Autor Beitrag
kradon
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 09.08.02 14:10 
Hallo zusammen,

ich habe ein großes Problem!
Folgenden Code habe ich aus dem Schweizer Delphiforum:

ausblenden 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:
procedure KillProcess(hWindowHandle: HWND);
var
  hprocessID: INTEGER;
  processHandle: THandle;
  DWResult: DWORD;
begin
  SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0,
    SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);

  if isWindow(hWindowHandle) then
  begin
  
    // PostMessage(hWindowHandle, WM_QUIT, 0, 0);

    { Get the process identifier for the window}
    GetWindowThreadProcessID(hWindowHandle, @hprocessID);
    if hprocessID <> 0 then
    begin
      { Get the process handle }
      processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,
        False, hprocessID);
      if processHandle <> 0 then
      begin
        { Terminate the process }
        TerminateProcess(processHandle, 0);
        CloseHandle(ProcessHandle);
      end;
    end;
  end;
end;


Da ich noch nicht lange mit Delphi programmiere habe ich keine
Ahnung was dort in dem Code passiert.

Wenn ich das ganze wie folgt aufrufe:
ausblenden Quelltext
1:
KillProcess('notepad');					

und das Programm Notepad ist gestartet wird es ordentlich beendet.
Nur wenn ich zum Beispiel Wordpad starte und dann folgendes Ausprobiere
ausblenden Quelltext
1:
KillProcess('wordpad');					

wird Wordpad nicht beendet.

Wieso nicht?

Und wie komme ich an das hWindowHandle aller geöffneten Programme?

Ich weiß, das ich viel von euch verlange, aber ich bin mit meinem Latein
am Ende, falls ich jemals etwas hatte. :(

Gruß
Karsten
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 09.08.02 16:56 
kradon hat folgendes geschrieben:
Wenn ich das ganze wie folgt aufrufe:
ausblenden Quelltext
1:
KillProcess('notepad');					

und das Programm Notepad ist gestartet wird es ordentlich beendet.

Was ich mal stark bezweifle, weil du der Funktion, die eine HWND-Variable erwartet, einen String übergibst.

Zitat:
Nur wenn ich zum Beispiel Wordpad starte und dann folgendes Ausprobiere
ausblenden Quelltext
1:
KillProcess('wordpad');					

wird Wordpad nicht beendet.

Wieso nicht?

Wahrscheinlich, weil der Klassenname von WordPad nicht "WordPad" sondern "WordPadClass" ist. Das ändert aber nichts an der Tatsache, dass du der Funktionen keinen String übergeben kannst.

Zitat:
Und wie komme ich an das hWindowHandle aller geöffneten Programme?

Suchfunktion: www.auq.de/viewtopic.php?t=223, wobei es aber auch diverse andere Beispiele gibt, in denen nicht die Fenster sondern gleich die Prozesse aufgelistet werden. Das schließt dann auch Programme ein, die in der Fensterliste gar nicht auftauchen würden.

Nur -und das ist meine ehrliche Meinung- was soll´s bringen, wenn du selbst sagst:
Zitat:
Da ich noch nicht lange mit Delphi programmiere habe ich keine
Ahnung was dort in dem Code passiert.

Versuch also erst mal den Code zu verstehen, sonst hast du am Ende ein Programm, das funktioniert, aber a) du weißt nicht warum, und b) wenn doch ein Fehler auftritt, dann weißt du erst recht nicht warum. :shock: