Entwickler-Ecke
Windows API - Namen aller geöffneten Programme!
kradon - Fr 09.08.02 14:10
Titel: Namen aller geöffneten Programme!
Hallo zusammen,
ich habe ein großes Problem!
Folgenden Code habe ich aus dem Schweizer Delphiforum:
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:
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
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
Delete - Fr 09.08.02 16:56
kradon hat folgendes geschrieben: |
Wenn ich das ganze wie folgt aufrufe:
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
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:
http://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:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!