まずこれらのネットワーク管理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 件のコメント:
コメントを投稿