AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Mit TShellExecuteInfo Programm schließen?
Thema durchsuchen
Ansicht
Themen-Optionen

Mit TShellExecuteInfo Programm schließen?

Ein Thema von iphi · begonnen am 12. Nov 2017 · letzter Beitrag vom 12. Nov 2017
Antwort Antwort
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#1

Mit TShellExecuteInfo Programm schließen?

  Alt 12. Nov 2017, 16:48
Hallo,

ich starte ein externes Programm mit
ShellExecuteEx(x: TShellExecuteInfo) und hatte gehofft, mit x.hProcess das Handle zum gestarteten Programm zu haben, mit dem ich das mittels
SendMessage(x.hProcess, WM_CLOSE, 0, 0); wieder beenden kann.
Das Handle stimmt aber nicht.
Kann ich mit der Information in der TShellExecuteInfo-Struktur x trotzdem das gestartete Programm identifizieren und stoppen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#2

AW: Mit TShellExecuteInfo Programm schließen?

  Alt 12. Nov 2017, 17:17
MSDN-Library durchsuchenSendMessage und MSDN-Library durchsuchenPostMessage senden ausschließlich an Windows-Handle (HWND),
aber du hast ein Prozess-Handle (HANDLE).

Man kann via MSDN-Library durchsuchenPostThreadMessage 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.


MSDN-Library durchsuchenTerminateProcess könnte man eventuell mit dem Handle nutzen, aber das wäre so, als wenn man sein eigenes Programm immer mit Delphi-Referenz durchsuchenHalt abschießt, also bähhhhhhhh.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Nov 2017 um 17:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Mit TShellExecuteInfo Programm schließen?

  Alt 12. Nov 2017, 17:47
Eine interessante Alternative die ich mal gesehen hatte, war es mit MSDN-Library durchsuchenCreateRemoteThread einen Thread im Zielprozess zu erstellen, welcher lediglich MSDN-Library durchsuchenExitProcess aufruft. Damit würdest du den entsprechenden Prozess sauber beenden.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#4

AW: Mit TShellExecuteInfo Programm schließen?

  Alt 12. Nov 2017, 18:29
Würden dabei gute Antivirenprogramme, also nicht Avira, nicht anschlagen?
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Mit TShellExecuteInfo Programm schließen?

  Alt 12. Nov 2017, 18:38
Würden dabei gute Antivirenprogramme, also nicht Avira, nicht anschlagen?
Gute Antivirenprogramme gibt es nicht Wenn die Verhaltenserkennung halbwegs ordentlich ist, sollte das aber nicht als gefährliches Verhalten erkannt werden. Ist es ja auch nicht.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#6

AW: Mit TShellExecuteInfo Programm schließen?

  Alt 12. Nov 2017, 18:43
Zitat:
...PostMessage senden ausschließlich an Windows-Handle (HWND),
aber du hast ein Prozess-Handle (HANDLE).
Gibt es keine Funktion, die dem Prozess-Handle das Windows-Handle zuordnet?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Mit TShellExecuteInfo Programm schließen?

  Alt 12. Nov 2017, 19:29
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#8

AW: Mit TShellExecuteInfo Programm schließen?

  Alt 12. Nov 2017, 22:41
Gibt es keine Funktion, die dem Prozess-Handle das Windows-Handle zuordnet?
Nein.

Welches Handle?
Eine Anwendung kann mehrere Fenster haben und jedes Control auf den Fenstern ist auch ein "Window-Control" mit einem HWND.

MSDN-Library durchsuchenFindWindow/MSDN-Library durchsuchenEnumWindows und MSDN-Library durchsuchenGetWindowThreadProcessId
https://msdn.microsoft.com/en-us/lib.../ms686837.aspx
oder Dergleichen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 23:42 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