主題の通りです。
Macアドレスの取得方法を教えてください。
また、最近は有線と無線LANが搭載されたPCが多いので、両方知りたいです。
よろしくお願いします。
Macアドレスの取得方法
有線であれ無線であれMACアドレスがNICに割り当てられている事に変わりはないので取得方法は一緒です
ちょっと面倒ですが
もしかしたらiphlpapi.dllが無いと怒られるかもしれません
MSDNで落とせるPlatformSDK(今はWindowsSDKだったかも)に入ってます
ちょっと面倒ですが
[ここをクリックすると内容が表示されます]
コード: 全て選択
#N88BASIC
'宣言
Declare Function GetIfTable Lib "iphlpapi.dll" (pIfTable As *MIB_IFTABLE,pdwSize As *DWord,bOrder As Long) As DWord
Const MAXLEN_PHYSADDR = 8
Const MAXLEN_IFDESCR = 256
Const MAX_INTERFACE_NAME_LEN = 256
TypeDef IF_INDEX = DWord
TypeDef IFTYPE = DWord
Enum INTERNAL_IF_OPER_STATUS
IF_OPER_STATUS_NON_OPERATIONAL = 0
IF_OPER_STATUS_UNREACHABLE
IF_OPER_STATUS_DISCONNECTED
IF_OPER_STATUS_CONNECTING
IF_OPER_STATUS_CONNECTED
IF_OPER_STATUS_OPERATIONAL
End Enum
Type MIB_IFROW
wszName[ELM(MAX_INTERFACE_NAME_LEN)] As Word
dwIndex As IF_INDEX
dwType As IFTYPE
dwMtu As DWord
dwSpeed As DWord
dwPhysAddrLen As DWord
bPhysAddr[ELM(MAXLEN_PHYSADDR)] As Byte
dwAdminStatus As DWord
dwOperStatus As INTERNAL_IF_OPER_STATUS
dwLastChange As DWord
dwInOctets As DWord
dwInUcastPkts As DWord
dwInNUcastPkts As DWord
dwInDiscards As DWord
dwInErrors As DWord
dwInUnknownProtos As DWord
dwOutOctets As DWord
dwOutUcastPkts As DWord
dwOutNUcastPkts As DWord
dwOutDiscards As DWord
dwOutErrors As DWord
dwOutQLen As DWord
dwDescrLen As DWord
bDescr[ELM(MAXLEN_IFDESCR)] As Byte
End Type
Const ANY_SIZE = 1
Type MIB_IFTABLE
dwNumEntries As DWord' テーブルの数
table[ELM(ANY_SIZE)] As MIB_IFROW
End Type
'ここからメイン
'変数
Dim TableBufferSize As DWord,pTable As *MIB_IFTABLE
'IfTableの大きさを調べる(TableBufferSizeに入る)
GetIfTable(NULL,VarPtr(TableBufferSize),FALSE)
'バッファ確保
pTable = calloc(TableBufferSize)
'IfTableをコピー
GetIfTable(pTable,VarPtr(TableBufferSize),FALSE)
'MACアドレス表示
'pTable->table[]はpTable->dwNumEntriesの分だけ存在する
'pTable->table[].bPhysAddr[]の配列がMACアドレス。配列の大きさはpTable->table[].dwPhysAddrLen
Dim i As Long,j As Long
For i=0 To pTable->dwNumEntries-1
If pTable->table.dwPhysAddrLen>0 Then
For j=0 To pTable->table.dwPhysAddrLen-2
Print Hex$(pTable->table.bPhysAddr[j])+":";
Next
Print Hex$(pTable->table.bPhysAddr[pTable->table.dwPhysAddrLen-1])
End If
Next
'バッファ開放
free(pTable)
もしかしたらiphlpapi.dllが無いと怒られるかもしれません
MSDNで落とせるPlatformSDK(今はWindowsSDKだったかも)に入ってます