AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Angemeldeter Benutzer auslesen

Ein Thema von cherry · begonnen am 31. Mär 2008 · letzter Beitrag vom 1. Apr 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Luckie
Luckie

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

Re: Angemeldeter Benutzer auslesen

  Alt 31. Mär 2008, 18:00
Zitat von Popov:
Zitat von cherry:
hi luckie, gute Frage. Ich meinte den Benutzer der vor dem Bildschirm sitzt!
geht das?
Delphi-Quellcode:
function GetCurrentUserName: string;
const
  cnMaxUserNameLen = 254;
var
  sUserName: string;
  dwUserNameLen: DWORD;
begin
  dwUserNameLen := cnMaxUserNameLen - 1;
  SetLength(sUserName, cnMaxUserNameLen);
  GetUserName(PChar(sUserName), dwUserNameLen);
  SetLength(sUserName, dwUserNameLen);
  Result := sUserName;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetCurrentUserName);
end;
Der Code ist nicht von mir, aber k.A. woher ich den habe.
Rat mal, was der bei einem Dienst zurückgibt? Dass das nicht funktioniert wurde übrigens schon festgestellt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#12

Re: Angemeldeter Benutzer auslesen

  Alt 31. Mär 2008, 18:07
Zitat:
Zitat von Luckie:
Der Code ist nicht von mir, aber k.A. woher ich den habe.
Rat mal, was der bei einem Dienst zurückgibt? Dass das nicht funktioniert wurde übrigens schon festgestellt.
Sorry, hab nur den Titel gelesen und den Code gerade parat gehabt. Vielleicht sollte man den Titel erweitern.
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: Angemeldeter Benutzer auslesen

  Alt 31. Mär 2008, 18:26
Mit JWSCL geht es so.

UPDATE: http://blog.delphi-jedi.net/2008/03/...rom-a-service/

Delphi-Quellcode:
uses
  JwaWindows,
  JwsclToken,
  JwsclSid,
  JwsclStrings,
  SysUtils;

var
  UserToken : TJwSecurityToken;
  ConsoleUser : TJwSecurityId;
  UserSidString,
  UserName : TJwString;
begin
  //erst ab Windows XP
  UserToken := TJwSecurityToken.CreateWTSQueryUserToken(INVALID_HANDLE_VALUE);
  try
    ConsoleUser := UserToken.TokenUser;
    try
      UserSidString := ConsoleUser.StringSID;
      UserName := ConsoleUser.GetAccountName('');
      //Writeln(UserSidString);
      //Writeln(UserName);
    finally
      FreeAndNil(ConsoleUser);
    end;
    //User personifizieren
    UserToken.ImpersonateLoggedOnUser;
    
    Führe Funktionen im Kontext des Benutzers aus
    z.B. WinAPI GetUserName(...), GetShellFolder, usw.
Auch Zugriff auf Dateien und Registry laufen dann in diesem Kontext. CreateProcess funktioniert jedoch nicht damit.
    
    UserToken.RevertToSelf;

  finally
    FreeAndNil(UserToken);
  end;
end;
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 Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#14

Re: Angemeldeter Benutzer auslesen

  Alt 31. Mär 2008, 22:19
Use the WTSGetActiveConsoleSessionId function to obtain the SessionId of the console session, then use WTSQuerySessionInformation with the WTSUserName parameter to obtain the username.

Or using the Terminal Server unit of the Security Library (JwsclTerminalServer):

Delphi-Quellcode:
uses JwaWindows, JwsclTerminalServer;

var
  TS: TJwTerminalServer;
  Session: TJwWTSSession;

begin
  TS := TJwTerminalServer.Create;

  if TS.EnumerateSessions then
  begin
    Session := ts.FindBySessionId(WTSGetActiveConsoleSessionId);

    if Session <> nil then
    begin
      Memo1.Lines.Add(Session.Username);
    end;

  end;

  TS.Free;
end;
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

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

Re: Angemeldeter Benutzer auslesen

  Alt 31. Mär 2008, 22:34
Zitat von cherry:
Halt mal... das mit GetEnvironmentVariable('USERNAME'); geht doch nicht, ich erhalte einen leeren String! wo ist denn da das Problem?
Also ich nehme immer diese Funktion die ich mal gefunden habe, funktioniert wunderbar.
Delphi-Quellcode:
function GetEnvVarValue(const VarName: string): string;
var
  BufSize: Integer; // buffer size required for value
begin
  // Get required buffer size (inc. terminal #0)
  BufSize := GetEnvironmentVariable(PChar(VarName), nil, 0);
  if BufSize > 0 then
  begin
    // Read env var value into result string
    SetLength(Result, BufSize - 1);
    GetEnvironmentVariable(PChar(VarName),
      PChar(Result), BufSize);
  end
  else
    // No such environment variable
    Result := '';
end;
Wenn Du jetzt trotzdem noch einen leeren String erhälst, dann schaue mal in Deinen Umgebungsvariablen nach, ob es dort die Variable USERNAME gibt.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#16

Re: Angemeldeter Benutzer auslesen

  Alt 31. Mär 2008, 22:36
Reading an env variable will read from the current user's environment (in this case SYSTEM). In this case the user of the interactive console session is asked...
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#17

Re: Angemeldeter Benutzer auslesen

  Alt 31. Mär 2008, 22:38
Zitat von RWarnecke:
Wenn Du jetzt trotzdem noch einen leeren String erhälst, dann schaue mal in Deinen Umgebungsvariablen nach, ob es dort die Variable USERNAME gibt.
Er will den Usernamen von einem Service aus ermitteln. Der Service läuft aber in einem komplett anderen Kontext als der User und sieht daher die Umgebungsvariablen des Users nicht.

Als kleiner Hinweis noch:
JwsclTerminalServer hat ein Problem unter Vista SP1 beim Aufruf der EnumerateSessions Methode. Ist also nur bedingt zu gebrauchen. Hatte für den Thread Ersteller eigentlich gedacht ihm nen ähnlichen Code zu geben und habs verworfen, als die kleine Demo unter SP1 permanent gecrashed ist.
  Mit Zitat antworten Zitat
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#18

Re: Angemeldeter Benutzer auslesen

  Alt 31. Mär 2008, 22:41
It works for me under SP1 (English) but please tell if anything and what goes wrong (I am the author of JwsclTerminalServer) so we can fix it.
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#19

Re: Angemeldeter Benutzer auslesen

  Alt 31. Mär 2008, 22:51
Used this little test application:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  JwsclTerminalServer;

var
  TS : TJwTerminalServer;
  i : integer;
begin
  TS := TJwTerminalServer.Create;
  TS.Connect;
  TS.EnumerateSessions; // Crash

  for i := 0 to TS.Sessions.Count - 1 do
    writeln(TS.Sessions[i].Username);
  TS.Free;
end.
System is Windows Vista x64 SP1. I will add a little trace later. Have to finish some work first.
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: Angemeldeter Benutzer auslesen

  Alt 31. Mär 2008, 23:33
Du verwendest 64bit Vista. Das hat hier so gut wie niemand
Daher wird es bei anderen garnicht crashen können.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 09:45 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