ノードタイプを取得          <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