ノードタイプを取得 <TOP>
GetNetworkParams ネットワーク構成値を取得
MoveMemory
メモリの指定領域をコピー
コマンドプロンプト ipconfig /all で確認しています。
'================================================================ '= ノードタイプを取得 '= (GetNetworkParams.bas) '================================================================ #include "Windows.bi" Type IP_ADDRESS_STRING IpAddressString(4 * 4 - 1) As Byte End Type Type IP_MASK_STRING IpMaskString(4 * 4 - 1) As Byte End Type Type IP_ADDR_STRING iNext As Long IpAddress As IP_ADDRESS_STRING IpMask As IP_MASK_STRING Context As Long End Type #define MAX_HOSTNAME_LEN 128 'ホスト名の最大長 #define MAX_DOMAIN_NAME_LEN 128 'ドメイン名の最大長 #define MAX_SCOPE_ID_LEN 256 'スコープIDの最大長 #define ERROR_NOT_SUPPORTED 50 'ネットワーク要求非サポートを示す #define ERROR_BUFFER_OVERFLOW 111 'バッファサイズ不足を示す #define ERROR_INVALID_PARAMETER 87 'パラメータ不正を示す #define ERROR_NO_DATA 232 'アダプタ情報不在を示す定数の宣言 #define BROADCAST_NODETYPE 1 'ブロードキャスト(b-node) #define PEER_TO_PEER_NODETYPE 2 'ピアツーピア(p-node) #define MIXED_NODETYPE 4 '混合(m-node) #define HYBRID_NODETYPE 8 'ハイブリッド(h-node) Type FIXED_INFO HostName(MAX_HOSTNAME_LEN + 4 - 1) As Byte DomainName(MAX_DOMAIN_NAME_LEN + 4 - 1) As Byte CurrentDnsServer As Long DnsServerList As IP_ADDR_STRING NodeType As Long ScopeId(MAX_SCOPE_ID_LEN + 4 - 1) As Byte EnableRouting As Long EnableProxy As Long EnableDns As Long End Type ' ネットワーク構成値を取得 Declare Function Api_GetNetworkParams& Lib "iphlpapi" Alias "GetNetworkParams" (pfi As Any, pOutBufLen&) ' メモリの指定領域をコピー Declare Sub MoveMemory Lib "Kernel32" Alias "RtlMoveMemory" (Dest As Any, Source As Any, ByVal length&) Var Shared Text1 As Object Var Shared Text2 As Object Var Shared Button1 As Object Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Text2.Attach GetDlgItem("Text2") : Text2.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var Needed As Long Var fi As FIXED_INFO Var ScopeId As String Var Ret As Long 'バッファ必要サイズを取得 Ret = Api_GetNetworkParams(ByVal 0, Needed) 'バッファサイズ不足のとき If Ret = ERROR_BUFFER_OVERFLOW Then 'バッファを確保 Var Buffer(Needed) As Byte 'その他のとき Else 'エラー情報を表示(戻り値によって分岐) Select Case Ret 'パラメータ不正 Case ERROR_INVALID_PARAMETER Text2.SetWindowText "パラメータが不正です。" 'アダプタ情報不在 Case ERROR_NO_DATA Text2.SetWindowText "アダプタ情報が存在しません。" 'ネットワーク要求非サポート Case ERROR_NOT_SUPPORTED Text2.SetWindowText "ネットワーク要求は" & "サポートされていません。" 'その他 Case Else Text2.SetWindowText "(" & Str$(Ret) & ")" & "アダプタ情報は取得できません。" End Select '取得できない Exit Sub End If 'ネットワーク構成値を取得 Ret = Api_GetNetworkParams(Buffer(0), Needed) 'ネットワーク構成値を構造体へ移動 MoveMemory fi, Buffer(0), Len(fi) 'ネットワーク構成値を表示(ノードタイプによって分岐) Select Case fi.NodeType 'ブロードキャスト Case BROADCAST_NODETYPE Text2.SetWindowText "BROADCAST" 'ピアツーピア Case PEER_TO_PEER_NODETYPE Text2.SetWindowText "PEER_TO_PEER" 'ミックス Case MIXED_NODETYPE Text2.SetWindowText "MIXED" 'ハイブリッド Case HYBRID_NODETYPE Text2.SetWindowText "HYBRID" 'その他 Case Else Text2.SetWindowText "UNKNOWN" End Select End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End