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? |
Re: GetUserNameEx
Hallo Luckie,
wir haben Netzwerk mit WinXP-Rechner ohne Domänencontroler und damit ausschlieslich Lokale Benutzerprofile. Die Ausgabe von 0 .. 11:
Code:
Gruß, Chris
0: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt
1: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt 2: CHRIS-ACER\chris 3: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt 4: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt 5: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt 6: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt 7: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt 8: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt 9: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt 10: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt 11: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt |
Re: GetUserNameEx
Zitat:
NACHTRAG. Bei mir zu Hause klappt auch 2 und drei - ohne Domain. ;) OK und ab dafür auf meine Homepage. |
Re: GetUserNameEx
Moin Luckie,
wie, 3 geht bei Dir auch :shock: :gruebel: Auf welchem Betriebssystem hast Du das getestet? (zum Vergleich: Bei mir ist es ein vollgepatchtes XP Pro SP 2 mit Netzwerk, aber ohne Domain) |
Re: GetUserNameEx
Dito: Windows XP Professional SP2, Netzwerk (zur Zeit aber nur der Router und mein Rechner), keine Domain.
2: HAL9000\Michael 3: Michael Puff "Michael" ist mein Login und "Michael Puff" der vollständige Name. |
Re: GetUserNameEx
Hi. Ich pushe an dieser Stelle mal. :stupid:
Grund: In der Code-Lib möchte ich angeben, welche Dienste bzw. Voraussetzungen notwendig sind, damit diese Funktionen laufen. |
Re: GetUserNameEx
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang mal meine Dienste.
|
Re: GetUserNameEx
Hast Du inzwischen eigentlich eine Lösung gefunden? Was steht bei Dir eigentlich in den Umgebungsvariablen USERDOMAIN und USERNAME drinne?
...:cat:... |
Re: GetUserNameEx
Hier an der Arbeit:
Code:
Zu Hause müsste ich erst gucken.
USERDNSDOMAIN=DATAWERK.DE
USERDOMAIN=DATAWERK USERNAME=michael.puff |
Re: GetUserNameEx
Zitat:
...:cat:... |
Re: GetUserNameEx
Jupp.
|
Re: GetUserNameEx
Hi,
sorry ich muss nochmals pushen, da der Code für die Code-Library wirklich gut geeignet wäre. Doch wenn er bei einigen Personen einwandfrei funktioniert und bei anderen nicht, dann ist das nicht so schön, daher würden mich die Ursachen, wieso es bei Michael nicht richtig geht, sehr interessieren. :stupid: |
Re: GetUserNameEx
So, zu Hause steht bei mir drinne:
Code:
und das war der Rechner, wo es ging. Hier ist aber kein USERDNSDOMAIN gesetzt.
USERDOMAIN=HAL9000
USERNAME=Michael |
Re: GetUserNameEx
Ich würde ihn erst einmal in die CodeLib setzen. Ich sehe das Problem hier eher in der Domain/auf dem speziellen PC als im Code. Wenn doch, kann man später immer noch korrigieren.
...:cat:... |
Re: GetUserNameEx
Man kann ja dazuschreiben, daß es eventuell Probleme gibt, wenn kein USERDNSDOMAIN gesetzt ist.
(oder lief es auch auf anderen Rechnern ohne USERDNSDOMAIN?) |
Re: GetUserNameEx
Es lief auf ohne.
|
Re: GetUserNameEx
Hi,
und noch einmal interessehalber: Ist nun geklärt, wann der Code Probleme verursachen könnte? An der USERDNSDOMAIN liegt es dann ja nicht. |
Re: GetUserNameEx
So, zum allerletzen Mal: *schieb*
Sonst kommt das eben nicht in die Code-Library. ;) |
Re: GetUserNameEx
Übernimm es doch einfach und verweis auf diesen Thread.
|
Re: GetUserNameEx
Zitat:
Ich finde, in der Code-Library sollten Dingen stehen, die ohne Probleme funktionieren und falls Probleme auftreten, sollte wenigstens die Ursache dafür bekannt sein. Sonst hilft der Code einigen vielleicht nicht und davon haben wir auch nichts. Hier im Thread gibt's ja auch keine Lösung, also ist es unsinnig, darauf zu verlinken, oder nicht? |
Re: GetUserNameEx
Zitat:
...:cat:... |
Re: GetUserNameEx
Zitat:
|
Re: GetUserNameEx
Hallo,
bei mir ergibt es folgendes: Zitat:
Ich musste die Zeile mit SetString so umformulieren, da sonst das Nullbyte mit drin ist (ungünstig z.B. für ShowMessage):
Delphi-Quellcode:
Und bei (9:) steht tatsächlich ein $A for dem eigentlichen Namen
SetString(Username, Buffer, Size-1)
|
Re: GetUserNameEx
Mal eine ganz dumme Frage: In welcher Unit steht denn getusernameex? getusername findet er, aber getusernameex?
Ich hab alle D-2005 Standardunits eingebunden... |
Re: GetUserNameEx
Zitat:
Delphi-Quellcode:
...:cat:...
function GetUserNameEx(NameFormat: DWORD;
lpNameBuffer: LPSTR; var nSize: DWORD):Boolean; stdcall; external 'secur32.dll' Name 'GetUserNameExA'; |
Re: GetUserNameEx
Sorry das hab ich irgendwie übersehen :oops:
|
Re: GetUserNameEx
Moin,
ich versuche die GUID des aktuellen Benutzers auszulesen und bekomme nur diese Meldung: GetLastError: 1332 Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt Was läuft denn da nur schief? benutzte GetUserNameExW
Delphi-Quellcode:
[add]
Type EXTENDED_NAME_FORMAT = LongWord;
Const NameUniqueId = EXTENDED_NAME_FORMAT(6); Function GetUserNameEx(NameFormat: EXTENDED_NAME_FORMAT; NameBuffer: PChar; Var Size: LongWord): Boolean; StdCall; External 'Secur32.dll' Name {$IF SizeOf(Char) = 1} 'GetUserNameExA' {$ELSE} 'GetUserNameExW' {$IFEND}; der Puffer ist mit 38 Zeichen (39 inkl. #0) groß genug und ich hab auch schon andere Werte versucht - kleiner, dann kommt der "zu kleiner Puffer"-Fehler - größer ändert nix also am Puffer liegt es nicht ich probier jetzt aber auch mal andere Formate (EXTENDED_NAME_FORMAT) aus [add2] alleine NameSamCompatible liefert ein Ergebnis, sonst kommt immer nur die 1332 :? [add3] arg :wall: , vergeßt es, ich seh grad, daß es der selbe Fehler ist, wie ihn Luckie schon auf Seite 1 hatte und hier hatte eh keiner 'ne Lösung :cry: |
Re: GetUserNameEx
weiß einer warum das nicht compilierbar ist?..
Delphi-Quellcode:
bekomme diese meldung.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} 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 Result := 0; Size := sizeof(Buffer); if GetUserNameEx(fFormat, Buffer, Size) then SetString(Username, Buffer, Size-1) else Result := GetLastError; end; procedure TForm1.Button2Click(Sender: TObject); const NameFormats : Array[0..9] of DWORD = ( NameUnknown, NameFullyQualifiedDN, NameSamCompatible, NameDisplay, NameUniqueId, NameCanonical, NameUserPrincipal, NameCanonicalEx, NameServicePrincipal, DNSDomainName); var Username: String; err: DWORD; i : shortint; sMessage : string; begin for i := 0 to high(NameFormats) do begin err := GetLoggedOnUserNameEx(NameFormats[i], Username); if err = 0 then sMessage := sMessage+format('%d: %s', [NameFormats[i], Username])+#13 else sMessage := sMessage+format('%d: %s', [NameFormats[i], SysErrorMessage(err)])+#13; end; ShowMessage(sMessage) end; end. [DCC Fehler] Unit1.pas(50): E2010 Inkompatible Typen: 'Array' und 'PAnsiChar' |
Re: GetUserNameEx
Geht es so?
Delphi-Quellcode:
if GetUserNameEx(fFormat, @Buffer[0], Size) then
|
Re: GetUserNameEx
mal eben durchgeschoben und kein Mecker bekommen!
Hast Du evtl. noch irgendwelche Reste aktiv? Gruß K-H |
Re: GetUserNameEx
Über welche Delphiversion reden wir denn hier?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 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