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 Prozess terminieren (https://www.delphipraxis.net/5032-prozess-terminieren.html)

ShadowCaster 21. Mai 2003 12:56


Prozess terminieren
 
hi Leute,

ich weiß wie ich eine Anwendung abschießen kann aber nicht wie ich deren Handle bekomm. FindWindow liefert mir bei Explorer immer 0 zurück. Das geht nicht. Ich möchte eigentlich nur den Explorer terminieren und neu starten. Danke schonmal :|

Motzi 21. Mai 2003 13:40

Du brauchst ein Process-Handle, FindWindow liefert allerdings ein Fenster-Handle! Schau dir mal die APIs GetWindowThreadProcessID und OpenProcess an...

ShadowCaster 21. Mai 2003 14:19

der Befehl "FindWindow" liefert aber immer 0 zurück. Das heißt, ohne Windowhandle kein Prozesshandle und ohne den kein Terminieren und neustarten. :cry:

Dem Befehl openprocess kann ich nur DWORD-Werte übergeben. Woher die nehmen wenn nicht stehlen? Ich kann auch RANDOM nehmen und mir da ne Zufallszahl zwischen 00000000 und FFFFFFFF übergeben. mit ner Chance von 1 zu 2^32 treff ich da den Explorer.

Chewie 21. Mai 2003 16:01

Bei openProcess musst du prozess-IDs übergeben. Die bekommst du über GetWindowThreadProcessID, wenn du das Fensterhandle hast.
Hast du das nicht, bleibt dir der Weg über die ToolHelp32-Funktionen. hier hab ich mal einen Tipp gepostet, der anhand des Anwendungsnamens die Fensterhandle auflistet. Daei wird u.a. auch die Prozess-ID ermittelt.

jbg 21. Mai 2003 16:55

Die ToolHelp32 kann er doch nicht nehmen, da er auch Windows NT unterstützen möchte. (Siehe Delphi-Forum.de)

ShadowCaster 22. Mai 2003 10:03

vielen Dank für die Hilfe. Wenn Windows NT erstmal nicht geht, dann ist es jetzt halt nicht möglich. Es geht darum dass die Funktion Teil des Virusremovers von mir wird und ich ne Anfrage von ner Firma mit über 50 infizierten PC's hab. Der Virus wird beim Start der Exe ausgeführt und infiziert den Prozess des Explorers im RAM. Die infizierte Exe selbst tut sonst nix, nachdem sie ausgeführt wurde. Ich muss nur einen Registrykey entfernen und den Explorer terminieren und neu starten. Dann sollte ich die Viren entfernen können. Es kann aber auch sein, dass ich noch andere infizierte Exe-Dateien neu starten muss. Kann nur hoffen, dass der Virus SVHOST.EXE nicht infiziert, sonst muss ich nämlich einen Reboot machen und den Virus von Dos aus removen.

Da hab ich eine Idee. Es wäre besser, wenn ich mich erstmal aufs Entfernen konzentriere und den Scanner von ner Bootdiskette starte und dann die Anwendungen cleane.

Vielen Dank jedoch. Falls jemand die Lösung für WINNT weiß, möge er sie bitte posten. :D

Motzi 22. Mai 2003 10:25

NT: EnumProcesses
oder aber auf Basis von nativen APIs.. :roll:

ShadowCaster 22. Mai 2003 10:43

Eine Frage noch: Das Codebeispiel mit den Thread-ID's ist ja echt klasse nur was ist wenn mein Explorer 5 mal auf is und ich gern alle 5 terminieren möchte? Dann müsste ich doch 5 Threads haben, oder? Wie terminierte ich das jetzt wenn ich die ProzessID hab? Also ich denke dass man den wohl nicht so einfach terminieren kann. Was ist wenn der Explorer spackt und sich nicht mit dem normalen Terminierungsweg beenden lässt?

Chewie 22. Mai 2003 11:27

Im Codebeispiel befinden sich im Prinzip im Array PIDArray die Prozess-IDs aller EXPLORER-prozesse. Um die alle zu schließen, kannst du sie in einer Schleife durchgehen und an TerminateProcess übergeben.

ShadowCaster 22. Mai 2003 11:35

Alles klar, danke :) Und starten mit Shellexecute? :mrgreen: ... war ja nur ne Frage :dancer:


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