AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Den angemeldeten User in Windows ermitteln

Den angemeldeten User in Windows ermitteln

Ein Thema von RWarnecke · begonnen am 20. Apr 2007 · letzter Beitrag vom 25. Mai 2020
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Den angemeldeten User in Windows ermitteln

  Alt 20. Apr 2007, 14:43
Hallo,

ich lasse ein Programm über eine Softwareverteilung mit dem User SYSTEM starten. Das funktioniert auch wunder bar. Ich habe nur ein Problem, im Programm benutze ich die folgende Funktion um den Usernamen zu ermitteln :
Delphi-Quellcode:
function GetCurrUserName: string;
var
  Size : DWORD;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  SetLength(Result, Size);
  if GetUserName(PChar(Result), Size) then
    SetLength(Result, Size)
  else
    Result := '';
end;
Nur leider liefert mir diese Funktion den Benutzernamen zurück, unter welchen ich das Programm ausführe. Also in meinem Fall SYSTEM. Gibt es noch einen anderen Weg um an den aktuell angemeldeten Benutzer zu kommen ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Den angemeldeten User in Windows ermitteln

  Alt 20. Apr 2007, 14:47
Muß denn überhaupt ein User angemeldet sein wenn diese Software-Verteilung läuft? Denn wenn keiner Angemeldet kann man auch nichts bestimmen. Dann könntest du nur schauen welche user schon mal lokal angemeldet waren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

Re: Den angemeldeten User in Windows ermitteln

  Alt 20. Apr 2007, 14:50
Die Anwendung wird erst dann gestartet, wenn der User sich angemeldet hat, vorher nicht.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Den angemeldeten User in Windows ermitteln

  Alt 20. Apr 2007, 14:52
Na dann guck, ob du die interaktive Windowssession WinSta0 findest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Den angemeldeten User in Windows ermitteln

  Alt 20. Apr 2007, 15:01
Was sagr den die Umgebeungsvariable username?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

Re: Den angemeldeten User in Windows ermitteln

  Alt 20. Apr 2007, 16:22
Danke Leutz, ich habe mal wieder den Wald vor lauter Bäumen nicht gesehen. Ich habe es jetzt über die Variable USERNAME gelöst.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#7

Re: Den angemeldeten User in Windows ermitteln

  Alt 3. Mai 2007, 12:23
Wie funktioniert denn das?

Die cmd Variable Username gibt den Name des derzeit eingeloggten Benutzers?
Als SystemDienst, wird doch da SYSTEM geliefert!?

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?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

Re: Den angemeldeten User in Windows ermitteln

  Alt 3. Mai 2007, 16:26
Zitat von Dezipaitor:
Wie funktioniert denn das?
Wie funktioniert was ? Ich habe immer den Benutzer zum Anfang ausgelesen, welcher auch im Task-Manager steht. Nur das es dort vorkommen kann, dass dann auch mal als Benutzer System ausgespuckt wird. Beispiel, wenn eine Anwendung über eine Software-Verteilung mit erweiterten Systemrechten gestartet wird.
Zitat von Dezipaitor:
Die cmd Variable Username gibt den Name des derzeit eingeloggten Benutzers?
Nach mein Wissen her ja. In der cmd Variable Username wird der aktuell eingeloggte Benutzername ausgegeben, der vor der Maschine sitzt.
Zitat von Dezipaitor:
Als SystemDienst, wird doch da SYSTEM geliefert!?
Ja
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#9

AW: Den angemeldeten User in Windows ermitteln

  Alt 20. Mai 2020, 10:43
Achtung. Der Code ist falsch.
Size sollte mit UNLEN + 1 = 256 + 1 initialisiert werden, nicht mit MAX_COMPUTERNAME_LENGTH + 1
Sonst schlägt das bei langen Usernamen fehl.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: Re: Den angemeldeten User in Windows ermitteln

  Alt 25. Mai 2020, 21:13
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:
  1. 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)
  2. Alternativ WTSEnumerateSessionsW und Freunde einsetzen.

Auch 2007 waren die NT-basierten Windowsversionen bereits multiuserfähig. Aber selbst dann war MSDN-Library durchsuchenGetUserName die bessere Wahl, da man sich bei Nutzung der Umgebungsvariablen darauf verlaßt, daß das entsprechende Benutzerprofil geladen wurde und diese Variablen enthält.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:50 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