Zitat von
Dezipaitor:
Und was verstehst du unter eingeloggt? Ist jemand eingeloggt, wenn der direkt vor dem Bildschirm sitzt,
oder geht es auch, wenn jemand über ein Terminal (RDP) eingeloggt ist?
Wie das mit RDP funktioniert weiß ich nicht. Für mein Programm war aber der User gemeint, der direkt gerade in diesem Augenblick vorm Rechner sitzt.
Noch einen Löffel Senf von mir. Dezipaitor hat natürlich recht (und vor allem Ahnung von der Materie). Also geht es dir vermutlich um den interaktiven Benutzer in der Konsolensitzung. Wobei man sich mit Tricks auch aus der Ferne darauf verbinden kann (oder zumindest damals konnte).
Zwei Möglichkeiten:
- Registryschlüssel unterhalb HKEY_USERS auslesen, die bekannten SIDs ausfiltern und über die SID den Benutzernamen ermitteln (geht auch in Domänen und auch auf entfernten Rechnern, solange Registry-Fernzugriff aktiv, PsLoggedOn macht das so)
- Alternativ WTSEnumerateSessionsW und Freunde einsetzen.
Auch 2007 waren die NT-basierten Windowsversionen bereits multiuserfähig. Aber selbst dann war
GetUserName die bessere Wahl, da man sich bei Nutzung der Umgebungsvariablen darauf verlaßt, daß das entsprechende Benutzerprofil geladen wurde und diese Variablen enthält.