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?