Das Thema nicht nur für Dienste wichtig ist, sondern z.B. auch für jedes Programm um festzustellen, ob es im Account/Konto des aktuellen Benutzers läuft (wenn nicht gibs Probleme beim Speichern in den User-spezifischen Registrykeys und AppData-Ordnern).
Folgende kürzere Lösung sollte auch gehen:
http://www.delphipraxis.net/245851-post6.html
Einfach WTSClientName durch WTSUserName ersetzen, und WTSQuerySessionInformation durch WTSQuerySessionInformationW ersetzen (
(sonst evt. Fehler).
Andere Wege sind hier aufgelistet:
http://social.msdn.microsoft.com/For...2-a51c8dfaae1c
Zum Verständnis: 1) Mit WTSGetActiveConsoleSessionId bekommt man die Session, die mit Tastatur und Maus verbunden ist.
2) Prozesse in der gleichen Session können unterschiedliche Usernamen haben, z.B. kann ich ein Programm mit "Ausführen als" in einem anderen UserAccount starten.