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:
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}
IMPLEMENTATION - Teil
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:
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;
Das hat die ganze Sache schon recht vereinfacht und funktioniert prima.