GetUserNameEx
Warum bekomme ich hier...
Delphi-Quellcode:
...immer die Fehlermeldung:
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 GetUserNameEx(NameFormat: DWORD; lpNameBuffer: LPSTR; var nSize: DWORD):Boolean; stdcall; external 'secur32.dll' Name 'GetUserNameExA'; function GetLoggedOnUserNameEx(fFormat: DWORD; var Username: String): DWORD; var Size : DWORD; Buffer: array [0..1024] of Char; begin Size := MAX_COMPUTERNAME_LENGTH + 1; if GetUserNameEx(fFormat, Buffer, Size) then SetString(Username, Buffer, Size); Result := GetLastError; end; procedure TForm1.Button1Click(Sender: TObject); var Username: String; err: DWORD; begin err := GetLoggedOnUserNameEx(3, Username); if err = 0 then ShowMessage(Username) else ShowMessage(SysErrorMessage(err)); end; Zitat:
|
Re: GetUserNameEx
Zwei "Fehler" sind drin.
#1
Delphi-Quellcode:
MAX_COMPUTERNAME_LENGTH ist definiert mit 15.
Size := MAX_COMPUTERNAME_LENGTH + 1;
Benutzernamen können länger sein. Size muss die Länge deines Char-Arrays ohne #0 sein. Bei deinem Beispiel 1024. #2
Delphi-Quellcode:
Den Rückgabewert solltest du von dem true/false von GetUserNameExA abhänig machen, da es mir auch schon passiert ist, dass die Funktion erfolgreich war, GetLasError aber trotzdem <> 0 war.
Result := GetLastError;
-edit- Das Phänomen mit der langen Antwortzeit habe ich bei mir auch, ich denke mal, dass das Problem hierbei bei Domänen-controller liegt. |
Re: GetUserNameEx
Danke für die Tipps. Sieht jetzt so aus:
Delphi-Quellcode:
Fehlermeldung bleibt allerdings. Geht es denn bei dir?
function GetLoggedOnUserNameEx(fFormat: DWORD; var Username: String): DWORD;
var Size: DWORD; Buffer: array [0..1024] of Char; begin Result := 0; Size := sizeof(Buffer); if GetUserNameEx(fFormat, Buffer, Size) then SetString(Username, Buffer, Size) else Result := GetLastError; end; |
Re: GetUserNameEx
Ja, bei mir geht's. :)
|
Re: GetUserNameEx
Danke für die Routine :mrgreen: Die Ergebnisse für die Werte 0 bis 11:
Code:
...:cat:...
0 -
1 - CN=Daniel Wischnewski,OU=User,OU=Office Ottobrunn,DC=gatenetwork,DC=office 2 - GATENETWORK\Daniel 3 - Daniel Wischnewski 4 - [email]daniel@gatenetwork.offi[/email]ce 5 - [email]daniel@gatenetwork.offi[/email]ce 6 - {aaaaaaaa-dddd-5555-yyyy-xxxxxxxxxxxx} 7 - gatenetwork.office/Office Ottobrunn/User/Daniel Wischnewski 8 - [email]daniel@gatenetwork.offi[/email]ce 9 - gatenetwork.office/Office Ottobrunn/User Daniel Wischnewski 10 - gatenetwork.office/Office Ottobrunn/User Daniel Wischnewski 11 - gatenetwork.office/Office Ottobrunn/User Daniel Wischnewski |
Re: GetUserNameEx
Grml. Und warum bei mir mal wieder nicht? :roll:
OK, da es funktioniert, habe ich es gleich mal für die Code-Lib vorgeschlagen. |
Re: GetUserNameEx
Zitat:
|
Re: GetUserNameEx
Zitat:
...:cat:... |
Re: GetUserNameEx
Unter "Anmelden an" steht DATAWERK. Mein Benutzerprofil scheint aber lokal auf dem Rechner zu liegen.
|
Re: GetUserNameEx
Moin Luckie,
mit 2 klappt das bei mir sogar ohne Domänenzugehörigkeit, bei den übrigen erhalte ich 1332 (Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt) Der Ort an dem das Profil liegt, spielt IMHO keine Rolle. Das Problem könnte sein, dass Du Dich meist auch dann an einem Rechner anmelden kannst, wenn Du kein Netzwerk zur Verfügung hast, da dann mit dem gecachten Profil angemeldet wird. Hast Du denn wirklich Netzwerkzugriff? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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