AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prozess terminieren

Ein Thema von ShadowCaster · begonnen am 21. Mai 2003 · letzter Beitrag vom 22. Mai 2003
Antwort Antwort
ShadowCaster

Registriert seit: 19. Mai 2003
71 Beiträge
 
Delphi 5 Enterprise
 
#1

Prozess terminieren

  Alt 21. Mai 2003, 13:56
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
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#2
  Alt 21. Mai 2003, 14:40
Du brauchst ein Process-Handle, FindWindow liefert allerdings ein Fenster-Handle! Schau dir mal die APIs GetWindowThreadProcessID und OpenProcess an...
Manuel Pöter
  Mit Zitat antworten Zitat
ShadowCaster

Registriert seit: 19. Mai 2003
71 Beiträge
 
Delphi 5 Enterprise
 
#3
  Alt 21. Mai 2003, 15:19
der Befehl "FindWindow" liefert aber immer 0 zurück. Das heißt, ohne Windowhandle kein Prozesshandle und ohne den kein Terminieren und neustarten.

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.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4
  Alt 21. Mai 2003, 17: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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5
  Alt 21. Mai 2003, 17:55
Die ToolHelp32 kann er doch nicht nehmen, da er auch Windows NT unterstützen möchte. (Siehe Delphi-Forum.de)
  Mit Zitat antworten Zitat
ShadowCaster

Registriert seit: 19. Mai 2003
71 Beiträge
 
Delphi 5 Enterprise
 
#6
  Alt 22. Mai 2003, 11: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.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#7
  Alt 22. Mai 2003, 11:25
NT: EnumProcesses
oder aber auf Basis von nativen APIs..
Manuel Pöter
  Mit Zitat antworten Zitat
ShadowCaster

Registriert seit: 19. Mai 2003
71 Beiträge
 
Delphi 5 Enterprise
 
#8
  Alt 22. Mai 2003, 11: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?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9
  Alt 22. Mai 2003, 12: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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
ShadowCaster

Registriert seit: 19. Mai 2003
71 Beiträge
 
Delphi 5 Enterprise
 
#10
  Alt 22. Mai 2003, 12:35
Alles klar, danke Und starten mit Shellexecute? ... war ja nur ne Frage
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 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