まずこれらのネットワーク管理APIや構造体を定義します。
uses
Windows;
type
NET_API_STATUS = DWORD;
{$EXTERNALSYM NET_API_STATUS}
PWKSTA_INFO_100 = ^WKSTA_INFO_100;
{$EXTERNALSYM PWKSTA_INFO_100}
_WKSTA_INFO_100 = record
wki100_platform_id: DWORD;
wki100_computername: PWideChar;
wki100_langroup: PWideChar;
wki100_ver_major: DWORD;
wki100_ver_minor: DWORD;
end;
{$EXTERNALSYM _WKSTA_INFO_100}
WKSTA_INFO_100 = _WKSTA_INFO_100;
{$EXTERNALSYM WKSTA_INFO_100}
PWKSTA_INFO_101 = ^WKSTA_INFO_101;
{$EXTERNALSYM PWKSTA_INFO_101}
_WKSTA_INFO_101 = record
wki101_platform_id: DWORD;
wki101_computername: PWideChar;
wki101_langroup: PWideChar;
wki101_ver_major: DWORD;
wki101_ver_minor: DWORD;
wki101_lanroot: PWideChar;
end;
{$EXTERNALSYM _WKSTA_INFO_101}
WKSTA_INFO_101 = _WKSTA_INFO_101;
{$EXTERNALSYM WKSTA_INFO_101}
PWKSTA_INFO_102 = ^WKSTA_INFO_102;
{$EXTERNALSYM PWKSTA_INFO_102}
_WKSTA_INFO_102 = record
wki102_platform_id: DWORD;
wki102_computername: PWideChar;
wki102_langroup: PWideChar;
wki102_ver_major: DWORD;
wki102_ver_minor: DWORD;
wki102_lanroot: PWideChar;
wki102_logged_on_users: DWORD;
end;
{$EXTERNALSYM _WKSTA_INFO_102}
WKSTA_INFO_102 = _WKSTA_INFO_102;
{$EXTERNALSYM WKSTA_INFO_102}
const
NERR_Success = 0;
{$EXTERNALSYM NERR_Success}
function NetWkstaGetInfo(servername: PWideChar; level: DWORD;
var bufptr: PByte): NET_API_STATUS; stdcall;
external 'netapi32.dll' Name 'NetWkstaGetInfo';
{$EXTERNALSYM NetWkstaGetInfo}
function NetApiBufferFree(Buffer: Pointer): NET_API_STATUS; stdcall;
external 'netapi32.dll' Name 'NetApiBufferFree';
{$EXTERNALSYM NetApiBufferFree}
今回はローカルコンピュータのNTドメイン/ワークグループ名があれば十分なので、servernameにNULLを、levelに100を指定してWKSTA_INFO_100構造体を取得し、wki100_langroupに格納されている文字列を取り出します。function GetNTDomainName: String;
var
Ptr: PWKSTA_INFO_100;
begin
Result := '';
if NetWkstaGetInfo(nil,100,PByte(Ptr)) <> NERR_Success then
begin
Exit;
end;
Result := Ptr^.wki100_langroup;
NetApiBufferFree(Ptr);
end;
ただしこの方法ではNTドメインに参加しているのかワークグループに参加しているのかを知ることができないので、NetGetJoinInformationを使用する方法をお勧めします。元ねたはDelphiDabbler.comのGet the network computer and domain names。
0 件のコメント:
コメントを投稿