Re: GetUserNameEx
Zitat:
@p80286: was meinst du mit reste? //edit: es geht um delphi 2010 |
Re: GetUserNameEx
Eventuell solltest du dann die Unicode-Version probieren:
Delphi-Quellcode:
Mal so in Blaue geschossen...
function GetUserNameExW(NameFormat: DWORD;
lpNameBuffer: LPCWSTR; var nSize: DWORD):Boolean; stdcall; external 'secur32.dll' Name 'GetUserNameExW'; |
Re: GetUserNameEx
|
Re: GetUserNameEx
Dann versuch mal die "einfache" Variante (keine Garantie, nur schnell heruntergetippt):
Delphi-Quellcode:
function CurrentUser: string;
var iLen: DWORD; begin iLen := 1024; SetLength(Result,iLen); if Windows.GetUserName(PChar(Result),iLen) then SetLength(Result,StrLen(PChar(Result))) else SetLength(Result,0); end; |
Re: GetUserNameEx
Was hast du erwartet wie sie denn aussieht?
|
Re: GetUserNameEx
Hallo Zusammen,
damit ich nicht immer eine extra Unit verwenden muss, habe ich den Funktionsaufruf von GetUserNameEx in der "windows.pas" ergänzt. Ich verwende Delphi 2010. In der "windows.pas" war schon die Deklaration von GetComputerNameEx enthalten. Also habe ich die Aufrufe von GetUserNameEx entsprechend angelegt. Komischerweise ist die Erklärung der Funktion in der Online-Hilfe von Delphi enthalten. Folgende Eintragungen habe ich in der "windows.pas" unterhalb von GetUserName vorgenommen: INTERFACE - Teil
Delphi-Quellcode:
IMPLEMENTATION - Teil
type
_EXTENDED_NAME_FORMAT = (NameUnknown, NameFullyQualifiedDN, NameSamCompatible, NameDisplay, NameEmpty1, NameEmpty2, NameUniqueId, NameCanonical, NameUserPrincipal, NameCanonicalEx, NameServicePrincipal, NameEmpty3, NameDnsDomain); {$EXTERNALSYM _EXTENDED_NAME_FORMAT} TExtendedNameFormat = _EXTENDED_NAME_FORMAT; EXTENDED_NAME_FORMAT = _EXTENDED_NAME_FORMAT; {$EXTERNALSYM EXTENDED_NAME_FORMAT} function GetUserNameEx(NameFormat: TExtendedNameFormat; lpBuffer: PWideChar; var nSize: DWORD): BOOL; stdcall; {$EXTERNALSYM GetUserNameEx} function GetUserNameExA(NameFormat: TExtendedNameFormat; lpBuffer: PAnsiChar; var nSize: DWORD): BOOL; stdcall; {$EXTERNALSYM GetUserNameExA} function GetUserNameExW(NameFormat: TExtendedNameFormat; lpBuffer: PWideChar; var nSize: DWORD): BOOL; stdcall; {$EXTERNALSYM GetUserNameExW}
Delphi-Quellcode:
function GetUserNameEx; external 'Secur32.dll' name 'GetUserNameExW';
function GetUserNameExA; external 'Secur32.dll' name 'GetUserNameExA'; function GetUserNameExW; external 'Secur32.dll' name 'GetUserNameExW'; Der Aufruf innerhalb des Programms erfolgt dann einfach über folgende Funktion:
Delphi-Quellcode:
Das hat die ganze Sache schon recht vereinfacht und funktioniert prima.
function GetAUserNameEx(ANameFormat: TExtendedNameFormat): String;
var ABuf: array[0..1023] of Char; Size: DWord; begin Result:= ''; Size:= 1024; if GetUserNameEx(ANameFormat, @ABuf, Size) then Result:= ABuf; end; |
Re: GetUserNameEx
Ich krieg Schmerzanfälle wenn ich sowas sehe...
Man sollte NIE eine System-Unit ändern. Das Problem ist nicht, dass man das nicht tun kann, sondern dass man das nicht tun sollte. Erstens funktioniert dann dein Programm nicht wenn jemand anderes das Programm kompiliert, der die Windows Unit nicht frisiert hat. Zweitens muss mann die Änderungen bei Updates der jeweiligen Unit nachführen. Und eine Ausrede wie: Damit ich eine Unit weniger einbinden muss, lass ich nicht gelten. Faule Programmierer sollten sich eines merken: Eines Tages wird sich das rächen und man wird sich wünschen man hätte es damals schon richtig gemacht. Trotzdem, wilkommen in der DP. |
Re: GetUserNameEx
Hallo ele,
danke für die Antwort. Das mit dem Einfügen in die "windows.pas" oder einer Extra Unit habe ich mir auch schon überlegt. Nun habe ich aber der Ergänzung den Vorzug gegeben, weil es sich nur um eine zusätzliche Funktion handelt, die eigentlich zu den anderen Funktionen gehört und wahrscheinlich vergessen worden ist. Nun gut, ich werde sie wohl in meine eigene Utils-Sammlung aufnehmen. Was mir aber überhaupt nicht gefällt, sind überhebliche Bemerkungen und ein arroganter Ton. Niemand ist allwissend. Wahre Größe zeigt sich dann, wenn man Fehler zugeben kann und daraus lernt. Dieses Forum ist für viele eine Anlaufstelle zur Problemlösung und zur Suche von Anregungen. Beiträge sollten meiner Meinung nach sachlich im Ton sein, so dass niemand abgeschreckt oder beleidigt wird. Das Lernen sollte immer im Vordergrund stehen. |
Re: GetUserNameEx
Wo war sein Beitrag jetzt überheblich, arrogant oder unsachlich?
|
Re: GetUserNameEx
Entschuldigung, falls das irgendwie Arrogant gewirkt hat, das war bestimmt nicht die Absicht. Dabei habe ich doch absichtlich Versucht Begriffe wie z.B "auspeitschen" zu vermeiden... :angel:
Du musst es nicht persönlich nehmen wenn ich über faule Programmierer schreibe, ich meine damit mich eingeschlossen. Auch ich bin manchmal faul, doch dass rächt sich dann in der Regel und endet in Mehrarbeit. Ist nur so ein Tipp aus meiner persönlichen Erfahrungskiste, niemand muss sich gezwungen fühlen irgendwas von dem zu tun was ich vorschlage. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 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