Gil*_*mor 15 windows delphi domain-name
我需要在Delphi中为域上的Windows机器获取完全限定的域名.
我试过用LookupAccountSid
它但它只给我netbios域名,在我的情况下它是"intranet"但我需要完整的"intranet.companyname.com"
有任何想法吗?
尝试GetUserNameEx
Windows API函数.
const
NameUnknown = 0;
NameFullyQualifiedDN = 1;
NameSamCompatible = 2;
NameDisplay = 3;
NameUniqueId = 6;
NameCanonical = 7;
NameUserPrincipal = 8;
NameCanonicalEx = 9;
NameServicePrincipal = 10;
NameDnsDomain = 12;
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'), 'GetUserNameExA');
if Assigned(GetUserNameEx) then
if GetUserNameEx(ANameFormat, Buf, BufSize) then
Result := Buf;
end;
Run Code Online (Sandbox Code Playgroud)
NameDnsDomain
例如,www.mydomain.com\user_name
如果您登录"www.mydomain.com"域,将导致使用该格式.
由于我现在在我们的应用程序中根据自己的需要实现了这个,@ iPath的评论是正确的.更好地使用GetComputerNameEx
,并指定一个COMPUTER_NAME_FORMAT
满足您自己的需求.
Delphi实现看起来像这样(Unicode版本):
interface
...
type
COMPUTER_NAME_FORMAT = (
ComputerNameNetBIOS,
ComputerNameDnsHostname,
ComputerNameDnsDomain,
ComputerNameDnsFullyQualified,
ComputerNamePhysicalNetBIOS,
ComputerNamePhysicalDnsHostname,
ComputerNamePhysicalDnsDomain,
ComputerNamePhysicalDnsFullyQualified,
ComputerNameMax);
function GetComputerNameExString(ANameFormat: COMPUTER_NAME_FORMAT): WideString;
implementation
...
function GetComputerNameExW(NameType: COMPUTER_NAME_FORMAT; lpBuffer: LPWSTR;
var nSize: DWORD): BOOL; stdcall; external kernel32 name 'GetComputerNameExW';
function GetComputerNameExString(ANameFormat: COMPUTER_NAME_FORMAT): WideString;
var
nSize: DWORD;
begin
nSize := 1024;
SetLength(Result, nSize);
if GetComputerNameExW(ANameFormat, PWideChar(Result), nSize) then
SetLength(Result, nSize)
else
Result := '';
end;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8945 次 |
最近记录: |