[Описание функции] Для интерфейсов ipX и NETBIOS требуются сетевые адреса. В этой статье показано, как получить адрес сетевой карты через VB, выполнив подробные действия.
шаг:
1) Сгенерируйте стандартные EXE-файлы в VisualBasic. Форма1 создается по умолчанию.
2) Добавьте командную кнопку в форму 1, имя по умолчанию — Command1.
3) Поместите следующий код в часть описания формы 1.
OptionExplicit
PRivateConstNCBASTAT=&H33
PrivateConstNCBNAMSZ=16
PrivateConstHEAP_ZERO_MEMORY=&H8
PrivateConstHEAP_GENERATE_EXCEPTIONS=&H4
PrivateConstNCBRESET=&H32
ЧастныйТипNCB
ncb_commandAsByte'Integer
ncb_retcodeAsByte'Целое число
ncb_lsnAsByte'Integer
ncb_numAsByte'Целое число
ncb_bufferAsLong'String
ncb_lengthAsInteger
ncb_callnameAsString*NCBNAMSZ
ncb_nameAsString*NCBNAMSZ
ncb_rtoAsByte'Integer
ncb_stoAsByte'Integer
ncb_postAsLong
ncb_lana_numAsByte'Integer
ncb_cmd_cpltAsByte'Integer
ncb_reserve(9)AsByte'Reserved, должно быть 0
ncb_eventAsLong
Конечный тип
ЧастныйтипADAPTER_STATUS
адаптер_адрес(5)AsByte'AsString*6
rev_majorAsByte'Integer
зарезервировано0AsByte'Целое число
адаптер_typeAsByte'Integer
rev_minorAsByte'Integer
продолжительностьAsInteger
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
адаптироватьAsADAPTER_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()
ДиммиNcbAsNCB
DimbRetAsByte
myNcb.ncb_command=NCBRESET
bRet=Netbios(myNcb)
myNcb.ncb_command=NCBASTAT
myNcb.ncb_lana_num=0
myNcb.ncb_callname="* "
DimmyASTATAsASTAT,tempASTATAsASTAT
DimpASTATAsLong
myNcb.ncb_length=Длин(myASTAT)
Debug.PrintErr.LastDllError
pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONSOrHEAP_ZERO_MEMORY,myNcb.ncb_length)
ЕслиpASTAT=0Тогда
Debug.Print "memoryallcoationfailed!"
ВыходSub
КонецЕсли
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». Обратите внимание, что адрес сетевой карты будет отображаться в информационном окне. ->