[คำอธิบายฟังก์ชัน] อินเทอร์เฟซ ipX และ NETBIOS ต้องใช้ที่อยู่เครือข่าย บทความนี้สาธิตวิธีการรับที่อยู่การ์ดเครือข่ายผ่าน VB ผ่านขั้นตอนโดยละเอียด
ขั้นตอน:
1) สร้างไฟล์ EXE มาตรฐานใน VisualBasic Form1 ถูกสร้างขึ้นตามค่าเริ่มต้น
2) เพิ่มปุ่มคำสั่งใน Form1 ชื่อเริ่มต้นคือ Command1
3) ใส่โค้ดต่อไปนี้ในส่วนคำอธิบายของ Form1
ตัวเลือกที่ชัดเจน
ส่วนตัวConstNCBASTAT=&H33
ส่วนตัวConstNCBNAMSZ=16
ไพรเวทConstHEAP_ZERO_MEMORY=&H8
PrivateConstHEAP_GENERATE_EXCEPTIONS=&H4
ส่วนตัวConstNCBRESET=&H32
ประเภทส่วนตัวNCB
ncb_commandAsByte'จำนวนเต็ม
ncb_retcodeAsByte'Integer
ncb_lsnAsByte'จำนวนเต็ม
ncb_numAsByte'จำนวนเต็ม
ncb_bufferAsLong'String
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
ประเภทสิ้นสุด
ประเภทส่วนตัวADAPTER_STATUS
adapter_address(5)AsByte'AsString*6
rev_majorAsByte'จำนวนเต็ม
สงวนไว้ 0AsByte'Integer
adapter_typeAsByte'Integer
rev_minorAsByte'Integer
ระยะเวลาเป็นจำนวนเต็ม
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
ประเภทสิ้นสุด
ประเภทส่วนตัวNAME_BUFFER
nameAsString*NCBNAMSZ
name_numAsInteger
name_flagsAsInteger
ประเภทสิ้นสุด
ประเภทส่วนตัวASTAT
ปรับเป็นADAPTER_STATUS
NameBuff(30)ในฐานะ NAME_BUFFER
ประเภทสิ้นสุด
PrivateDeclareFunctionNetbiosLib "netapi32.dll" (pncbAsNCB) AsByte
PrivateDeclareSubCopyMemoryLib "kernel32" นามแฝง "RtlMoveMemory" (hpvDestAsAny, ByValhpvSourceAsLong, ByValcbCopyAsLong)
PrivateDeclareFunctionGetProcessHeapLib "kernel32"()AsLong
PrivateDeclareFunctionHeapAllocLib "kernel32" (ByValhHeapAsLong, ByValdwFlagsAsLong, ByValdwBytesAsLong) AsLong
PrivateDeclareFunctionHeapFreeLib "kernel32" (ByValhHeapAsLong, ByValdwFlagsAsLong, lpMemAsAny) AsLong
ใส่รหัสต่อไปนี้ลงในเหตุการณ์ Command1_Click:
PrivateSubCommand1_คลิก()
DimmyNcbAsNCB
DimbRetAsByte
myNcb.ncb_command=NCBRESET
bRet=Netbios(myNcb)
myNcb.ncb_command=NCBASTAT
myNcb.ncb_lana_num=0
myNcb.ncb_callname="* "
DimmyASTATAsASTAT,tempASTATAsASTAT
ดิมป์ASTATAsLong
myNcb.ncb_length=เลน(myASTAT)
ตรวจแก้จุดบกพร่อง PrintErr.LastDllError
pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONSOrHEAP_ZERO_MEMORY,myNcb.ncb_length)
ถ้าpASTAT=0แล้ว
Debug.Print "การเคลือบผิวหน่วยความจำล้มเหลว!"
ทางออกย่อย
สิ้นสุดถ้า
myNcb.ncb_buffer=pASTAT
bRet=Netbios(myNcb)
ตรวจแก้จุดบกพร่อง 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
สิ้นสุดย่อย
4) กด F5 เพื่อรันโปรแกรม
5) คลิก คำสั่ง1. โปรดทราบว่าที่อยู่การ์ดเครือข่ายจะแสดงในกล่องข้อมูล -