Mit TShellExecuteInfo Programm schließen?
Hallo,
ich starte ein externes Programm mit
Delphi-Quellcode:
und hatte gehofft, mit
ShellExecuteEx(x: TShellExecuteInfo)
Delphi-Quellcode:
das Handle zum gestarteten Programm zu haben, mit dem ich das mittels
x.hProcess
Delphi-Quellcode:
wieder beenden kann.
SendMessage(x.hProcess, WM_CLOSE, 0, 0);
Das Handle stimmt aber nicht. Kann ich mit der Information in der TShellExecuteInfo-Struktur x trotzdem das gestartete Programm identifizieren und stoppen? |
AW: Mit TShellExecuteInfo Programm schließen?
SendMessage und PostMessage senden ausschließlich an Windows-Handle (HWND),
aber du hast ein Prozess-Handle (HANDLE). Man kann via PostThreadMessage eine Message direkt an den Thread-Handle Thread-ID (DWORD) des Hauptfensters der Application schicken. Wie dem auch sei, du mußt dir also erstmal ein Fenster oder den/alle Threads des anderen Programms suchen, dessen Prozess-ID du ebenfalls bekommen hast. TerminateProcess könnte man eventuell mit dem Handle nutzen, aber das wäre so, als wenn man sein eigenes Programm immer mit Halt abschießt, also bähhhhhhhh. |
AW: Mit TShellExecuteInfo Programm schließen?
Eine interessante Alternative die ich mal gesehen hatte, war es mit CreateRemoteThread einen Thread im Zielprozess zu erstellen, welcher lediglich ExitProcess aufruft. Damit würdest du den entsprechenden Prozess sauber beenden.
|
AW: Mit TShellExecuteInfo Programm schließen?
Würden dabei gute Antivirenprogramme, also nicht Avira, nicht anschlagen?
|
AW: Mit TShellExecuteInfo Programm schließen?
Zitat:
|
AW: Mit TShellExecuteInfo Programm schließen?
Zitat:
|
AW: Mit TShellExecuteInfo Programm schließen?
Andersherum: du könntest mit EnumWindows über alle Toplevel-Fenster iterieren und dann mit GetWindowThreadProcessID prüfen, ob das aktuelle Fenster zum gemerkten Prozess gehört.
|
AW: Mit TShellExecuteInfo Programm schließen?
Zitat:
Welches Handle? :zwinker: Eine Anwendung kann mehrere Fenster haben und jedes Control auf den Fenstern ist auch ein "Window-Control" mit einem HWND. FindWindow/EnumWindows und GetWindowThreadProcessId https://msdn.microsoft.com/en-us/lib.../ms686837.aspx oder Dergleichen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:53 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