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 Ausgehend von der ProcessID erkennen, ob User GUI-Fenster öffnen kann? (https://www.delphipraxis.net/173577-ausgehend-von-der-processid-erkennen-ob-user-gui-fenster-oeffnen-kann.html)

CCRDude 5. Mär 2013 13:09

Ausgehend von der ProcessID erkennen, ob User GUI-Fenster öffnen kann?
 
Ich habe einen Service, der die Prozess-ID eines Prozesses übermittelt bekommt, und dann dem Benutzer des Prozesses mittels eines weiteren Prozesses etwas anzeigen soll.

Der zweite Teil ist "simpel" - Prozess-Token holen und CreateProcessAsUser verwenden. Wenn es kein UI-Prozess ist, will ich das auf den Hauptdesktop werfen; per WTSGetActiveConsoleSessionId, WTSQueryUserToken und DuplicateTokenEx komme ich so auch an die Stelle, wo ich CreateprocessAsUser verwenden kann.

Ich hänge jetzt leider etwas daran zu erkennen, ob die Umgebung des aufrufenden Prozesses nun Userinteraktionen (hier in der Form einer VCL-Anwendung) zulässt. Wäre es ein Systemdienst, wäre dies ja sicher nicht der Fall.

Mein aktueller Ansatz war, per Toolhelp32 eine Liste aller Threads durchzugehen, wenn der Thread zum Prozess gehört, auf die Thread-ID ein GetThreadDesktop auszuführen, und wenn dies erfolgreich ist, glaubte ich zu wissen eine Desktop-Anwendung zu haben.

Klappte wunderbar auf meinem Win7-64 mit einem Haufen Prozessen, aber nicht unter WinXP... daher meine Frage: wie kann ich dies besser feststellen?

Codehunter 5. Mär 2013 13:47

AW: Ausgehend von der ProcessID erkennen, ob User GUI-Fenster öffnen kann?
 
Kleine Zwischenfrage am Rande: Windows XP ist in 12 Monaten Geschichte. Willst du da wirklich noch Hirnschmalz reinstecken?

CCRDude 5. Mär 2013 14:39

AW: Ausgehend von der ProcessID erkennen, ob User GUI-Fenster öffnen kann?
 
Ja, will ich... aus zwei Gründen:
  • 40% unserer Kunden verwenden noch XP.
  • Es ist mir unter XP aufgefallen, aber meine Methode war geraten, daher könnte das Problem auch unter neueren Windows-Versionen auftreten.
Daneben einfach mein Interesse, wie man es besser machen könnte :)

Codehunter 5. Mär 2013 15:25

AW: Ausgehend von der ProcessID erkennen, ob User GUI-Fenster öffnen kann?
 
Vielleicht hilft das hier weiter. In der Annahme, wenn ein aufrufender Prozess eine Desktop-Anwendung ist, dann hat er ein MainWindow und das hat ein Handle. Wenn der Prozess z.B. ein Systemdienst ist, dann dürfte er auch kein MainWindow haben.


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