【機能説明】 ipXおよびNETBIOSインターフェースにはネットワークアドレスが必要です。この記事では、VB を介してネットワーク カード アドレスを取得する方法を詳細な手順で説明します。
ステップ:
1) VisualBasic で標準 EXE ファイルを生成します。 Form1 はデフォルトで作成されます。
2) Form1 にコマンド ボタンを追加します。デフォルト名は Command1 です。
3) Form1の説明部分に以下のコードを記述します。
オプション明示的
PRivateConstNCBASTAT=&H33
PrivateConstNCBNAMSZ=16
PrivateConstHEAP_ZERO_MEMORY=&H8
PrivateConstHEAP_GENERATE_EXCEPTIONS=&H4
PrivateConstNCBRESET=&H32
プライベートタイプNCB
ncb_commandAsByte'整数
ncb_retcodeAsByte'整数
ncb_lsnAsByte'整数
ncb_numAsByte'整数
ncb_bufferAsLong'文字列
ncb_lengthAsInteger
ncb_callnameAsString*NCBNAMSZ
ncb_nameAsString*NCBNAMSZ
ncb_rtoAsByte'整数
ncb_stoAsByte'整数
ncb_postAsLong
ncb_lana_numAsByte'整数
ncb_cmd_cpltAsByte'整数
ncb_reserve(9)AsByte'予約済み、0でなければなりません
ncb_eventAsLong
終了タイプ
PrivateTypeADAPTER_STATUS
アダプターアドレス(5)AsByte'AsString*6
rev_majorAsByte'整数
予約済み0AsByte'整数
アダプタータイプAsByte'整数
rev_minorAsByte'整数
整数としての期間
frmr_recvAsInteger
frmr_xmitAsInteger
iframe_recv_errAsInteger
xmit_abortsAsInteger
xmit_successAsLong
recv_successAsLong
iframe_xmit_errAsInteger
recv_buff_unavailAsInteger
t1_timeoutsAsInteger
ti_timeoutsAsInteger
予約済み1AsLong
free_ncbsAsInteger
max_cfg_ncbsAsInteger
max_ncbsAsInteger
xmit_buf_unavailAsInteger
max_dgram_sizeAsInteger
pending_sessAsInteger
max_cfg_sessAsInteger
max_sessAsInteger
max_sess_pkt_sizeAsInteger
name_countAsInteger
終了タイプ
PrivateTypeNAME_BUFFER
nameAsString*NCBNAMSZ
name_numAsInteger
name_flagsAsInteger
終了タイプ
プライベートタイプASTAT
adaptAsADAPTER_STATUS
NameBuff(30)AsNAME_BUFFER
終了タイプ
PrivateDeclareFunctionNetbiosLib「netapi32.dll」(pncbAsNCB)AsByte
PrivateDeclareSubCopyMemoryLib"kernel32"Alias"RtlMoveMemory"(hpvDestAsAny,ByValhpvSourceAsLong,ByValcbCopyAsLong)
PrivateDeclareFunctionGetProcessHeapLib"kernel32"()AsLong
PrivateDeclareFunctionHeapAllocLib"kernel32"(ByValhHeapAsLong,ByValdwFlagsAsLong,ByValdwBytesAsLong)AsLong
PrivateDeclareFunctionHeapFreeLib"kernel32"(ByValhHeapAsLong,ByValdwFlagsAsLong,lpMemAsAny)AsLong
次のコードを Command1_Click イベントに追加します。
PrivateSubCommand1_Click()
DimmyNcbAsNCB
DimbRetAsByte
myNcb.ncb_command=NCBRESET
bRet=Netbios(myNcb)
myNcb.ncb_command=NCBASTAT
myNcb.ncb_lana_num=0
myNcb.ncb_callname="* "
DimmyASTATASASTAT、tempASTATASASTAT
ディンプアスタタスロング
myNcb.ncb_length=レン(myASTAT)
Debug.PrintErr.LastDllError
pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONSorHEAP_ZERO_MEMORY,myNcb.ncb_length)
IfpASTAT=0Then
Debug.Print「メモリオールコーティングに失敗しました!」
ExitSub
EndIf
myNcb.ncb_buffer=pASTAT
bRet=Netbios(myNcb)
Debug.PrintErr.LastDllError
CopyMemorymyASTAT,myNcb.ncb_buffer,Len(myASTAT)
MsgBoxHex(myASTAT.adapt.adapter_address(0))&""&Hex(myASTAT.adapt.adapter_address(1))_
&""&Hex(myASTAT.adapt.adapter_address(2))&""_
&Hex(myASTAT.adapt.adapter_address(3))_
&""&Hex(myASTAT.adapt.adapter_address(4))&""_
&Hex(myASTAT.adapt.adapter_address(5))
HeapFreeGetProcessHeap(),0,pASTAT
EndSub
4) F5 を押してプログラムを実行します。
5) 「コマンド 1」をクリックします。ネットワーク カード アドレスが情報ボックスに表示されることに注意してください。 ->