AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

GetUsernameEx

Ein Thema von kuba · begonnen am 11. Aug 2014 · letzter Beitrag vom 26. Nov 2014
Antwort Antwort
Seite 1 von 3  1 23   
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#1

GetUsernameEx

  Alt 11. Aug 2014, 16:31
Hallo,

seit Stunden versuche ich herauszufinden was an meinem Programm nicht funktioniert. Ich möchte den Benutzernamen des am Desktop angemeldeten Benutzer aus einem NT-Service ermitteln. Dabei verwende ich folgenden Code:

Delphi-Quellcode:
const
  NameUnknown = 0; // Unknown name type.
  NameFullyQualifiedDN = 1; // Fully qualified distinguished name
  NameSamCompatible = 2; // Windows NT® 4.0 account name
  NameDisplay = 3; // A "friendly" display name
  NameUniqueId = 6; // GUID string that the IIDFromString function returns
  NameCanonical = 7; // Complete canonical name
  NameUserPrincipal = 8; // User principal name
  NameCanonicalEx = 9;
  NameServicePrincipal = 10; // Generalized service principal name
  DNSDomainName = 11; // DNS domain name, plus the user name

function GetUserNameExString(ANameFormat: DWORD): string;
var
  Buf: array[0..256] of Char;
  BufSize: DWORD;
  GetUserNameEx: function (NameFormat: DWORD; lpNameBuffer: LPSTR;
    var nSize: ULONG): BOOL; stdcall;
begin
  Result := '';
  BufSize := SizeOf(Buf) div SizeOf(Buf[0]);
  GetUserNameEx := GetProcAddress(GetModuleHandle('secur32.dll'), 'GetUserNameExW');
  if Assigned(GetUserNameEx) then
    if GetUserNameEx(ANameFormat, @Buf[0], BufSize) then
      Result := Buf;
end;
Als Ergebnis erhalte ich jedoch nicht den Benutzernamen sondern die Workgroup und den PC-Namen im Format WORKGROUP\PC-Name

Aufruf:
showmessage(GetUserNameExString(NameSamCompatible));
Delphi XE2/64Bit. Was könnte da falsch laufen ??

KUBA
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.019 Beiträge
 
Delphi 12 Athens
 
#2

AW: GetUsernameEx

  Alt 11. Aug 2014, 16:43
Ich hätte jetzt vermutet, daß die Funktion maximal den Namen zurückgeben kann, von dem Account, in welchem der Service läuft.
Und das wird vermutlich nicht der Account des Bentzters sein.

Die Funktion heißt ja praktisch "gib die Infos von meinem Account" (mein = von dem Programm)


Vermutlich wird man irgendwie rausfinden müssen welcher "Desktop" aktuell auf dem Monitor angezeigt wird und liest dann von Diesem den Account aus.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: GetUsernameEx

  Alt 11. Aug 2014, 17:02
Hallo,

vielleicht hilft dir das

http://www.delphipages.com/forum/arc.../t-203396.html

Dort suchen nach
alee
SHGetFolderPath(0, CSIDL_APPDATA, 0, 0, PChar(appPath));


Heiko
Heiko
  Mit Zitat antworten Zitat
JYPDWhite

Registriert seit: 29. Sep 2010
28 Beiträge
 
#4

AW: GetUsernameEx

  Alt 11. Aug 2014, 18:36
So funktioniert es bei uns:
Delphi-Quellcode:
procedure GetUserNameEx(NameFormat: DWORD;lpNameBuffer: LPSTR; nSize: PULONG);
          stdcall; external 'secur32.dllName 'GetUserNameExW';



procedure UsernameAuslesen();
var
  UserName_array: array[0..250] of char;
  szUserName : array[0..99] of Char;
  Size: DWORD;
begin
    FillChar(szUserName, SizeOf(szUserName), 0);
     Size := SizeOf(szUserName);
    GetUserName(szUserName, Size); // das holt erstmal die GID des aktuellen Nutzers
    UserNameLogin:= Uppercase(szUserName);
    Size := 250;
    GetUserNameEx(3, @UserName_array, @Size); // das ließt dann vorname nachname usw aus
end;
Das ist jetzt aus nem größeren Teil Code zusammenkopiert. Kann also sein dass es jetzt nicht Copy&Paste funktioniert
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: GetUsernameEx

  Alt 11. Aug 2014, 22:14
Das ist jetzt aus nem größeren Teil Code zusammenkopiert
Das ist doch ein kleiner Wink dass der größere Codeteil nicht optimal gebaut ist.
Es passiert zuviel innerhalb einer Funktion bzw. Methode.
Solange man aus einem größeren Codeblock nützliche Funktionen isolieren kann ist der Sourcecode noch nicht richtig sauber.
fork me on Github
  Mit Zitat antworten Zitat
JYPDWhite

Registriert seit: 29. Sep 2010
28 Beiträge
 
#6

AW: GetUsernameEx

  Alt 11. Aug 2014, 22:25
OT: Ich weiß... Aber wie du warscheinlich ebenfals aus der Praxis weißt kann man nicht einfach ein ganzes Programm was man übernommen hat direkt komplett umbauen sondern kann das allenfalls nach und nach machen, wer soll das den sonst bezahlen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: GetUsernameEx

  Alt 11. Aug 2014, 22:37
OT: Ich weiß... Aber wie du warscheinlich ebenfals aus der Praxis weißt kann man nicht einfach ein ganzes Programm was man übernommen hat direkt komplett umbauen sondern kann das allenfalls nach und nach machen, wer soll das den sonst bezahlen
Aber du hast den Code doch jetzt in den Fingern, da bietet sich doch direkt ein Refactoring an
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: GetUsernameEx

  Alt 11. Aug 2014, 22:48
Vermutlich wird man irgendwie rausfinden müssen welcher "Desktop" aktuell auf dem Monitor angezeigt wird und liest dann von Diesem den Account aus.
Super Idee, so "ähnlich" habe ich es jetzt für meine Zwecke gelöst. Wenn der richtige Benutzer angemeldet ist läuft eine bestimmte Anwendung im Hintergrund, das reicht mir vollkommen

Vielen Dank für die Anregungen.

KUBA
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von Kurt56
Kurt56

Registriert seit: 6. Apr 2005
Ort: Wedemark
47 Beiträge
 
Delphi XE8 Professional
 
#9

AW: GetUsernameEx

  Alt 25. Nov 2014, 15:06
Ich habe das Problem, den Usernamen zu finden, so gelöst:

Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
var
    lpbuff : pchar;
    nSize : dword;
begin

lpbuff:=PChar(AllocMem(30));
getusername(lpbuff, nsize);
//showmessage(lpbuff);
getusername(lpbuff, nsize);
//showmessage(lpbuff);
end;
Leider erhalte ich bei dem ersten Aufruf von "getusername" nur einen leeren String.
Doch mit dem gleich darauf folgenden Aufruf erhalte ich den Usernamen, der sich aktuell angemeldet hat.

Warum der 1. Aufruf noch nicht zum Ziel führt, habe ich nie untersucht, Hauptsache ich komme so an den Usernamen.

Kurt
Kurt
Für die kleinen Fehler haben wir Computer,
die großen Fehler machen wir selber.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: GetUsernameEx

  Alt 25. Nov 2014, 15:09
Leider erhalte ich bei dem ersten Aufruf von "getusername" nur einen leeren String.
Doch mit dem gleich darauf folgenden Aufruf erhalte ich den Usernamen, der sich aktuell angemeldet hat.

Warum der 1. Aufruf noch nicht zum Ziel führt, habe ich nie untersucht, Hauptsache ich komme so an den Usernamen.
Da brauchst du nix untersuchen, einfach die Funktionsbeschreibung durchlesen.
Der zweite Parameter ist ein In/Out-parameter. Rein gibtst du die Buffergröße, raus bekommst du die nötige Buffergröße.
Also beim ersten Aufruf geht du mit größe 0 rein, raus kommt die nötige größe und beim zweiten aufruf hast du diese als in-Wert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

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 23:43 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