问题描述
我需要获取Delphi域中Windows计算机的完全限定域名。
I need to get a fully qualified domain name for a Windows machine on a domain in Delphi.
我尝试使用 LookupAccountSid
,但是它只给我netbios域名,在我的情况下
是 Intranet,但我需要完整的 intranet.companyname.com
I've tried to use LookupAccountSid
but it gives me only the netbios domain name,in my case it is "intranet" but I need the full "intranet.companyname.com"
有什么想法吗?
推荐答案
尝试 Windows API函数
Try the GetUserNameEx
Windows API function.
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;
如果您登录到 www.mydomain.com域,则结果为 www.mydomain.com\user_name
。
using the NameDnsDomain
format for example, will result www.mydomain.com\user_name
if you are logged into "www.mydomain.com" domain.
由于我现在在应用程序中根据自己的需要实施了此操作,因此@iPath的注释已正确退出。最好使用,并指定满足您自己的需求。
Since I now implemented this for my own needs in our application, @iPath's comment was quit right. better use GetComputerNameEx
, and specify one of the COMPUTER_NAME_FORMAT
for your own needs.
Delphi实现如下所示(Unicode版本):
A Delphi implementation would look like this (Unicode version):
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;
这篇关于如何在Windows中使用Delphi获取完全合格的域名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!