[Descrição da função] As interfaces ipX e NETBIOS requerem endereços de rede. Este artigo demonstra como obter o endereço da placa de rede por meio de VB por meio de etapas detalhadas.
etapa:
1) Gere arquivos EXE padrão em VisualBasic. Form1 é criado por padrão.
2) Adicione um botão de comando no Form1, o nome padrão é Command1.
3) Coloque o seguinte código na parte de descrição do Form1.
OpçãoExplícita
PRivateConstNCBASTAT=&H33
PrivateConstNCBNAMSZ=16
PrivateConstHEAP_ZERO_MEMORY=&H8
PrivateConstHEAP_GENERATE_EXCEPTIONS=&H4
PrivateConstNCBRESET=&H32
PrivateTypeNCB
ncb_commandAsByte'Integer
ncb_retcodeAsByte'Integer
ncb_lsnAsByte'Integer
ncb_numAsByte'Integer
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'Reservado,mustbe0
ncb_eventAsLong
EndType
PrivateTypeADAPTER_STATUS
endereço_adaptador(5)AsByte'AsString*6
rev_majorAsByte'Integer
reservado0AsByte'Integer
adaptador_typeAsByte'Integer
rev_minorAsByte'Integer
duraçãoAsInteger
frmr_recvAsInteger
frmr_xmitAsInteger
iframe_recv_errAsInteger
xmit_abortsAsInteger
xmit_successAsLong
recv_successAsLong
iframe_xmit_errAsInteger
recv_buff_unavailAsInteger
t1_timeoutsAsInteger
ti_timeoutsAsInteger
Reservado1AsLong
free_ncbsAsInteger
max_cfg_ncbsAsInteger
max_ncbsAsInteger
xmit_buf_unavailAsInteger
max_dgram_sizeAsInteger
pendente_sessAsInteger
max_cfg_sessAsInteger
max_sessAsInteger
max_sess_pkt_sizeAsInteger
nome_contaAsInteger
EndType
PrivateTypeNAME_BUFFER
nomeAsString*NCBNAMSZ
nome_numAsInteger
nome_flagsAsInteger
EndType
PrivateTypeASTAT
adaptAsADAPTER_STATUS
NomeBuff(30)AsNAME_BUFFER
EndType
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
Coloque o seguinte código no evento Command1_Click:
PrivateSubCommand1_Click()
DimmyNcbAsNCB
DimbRetAsByte
myNcb.ncb_command=NCBRESET
bRet=Netbios(meuNcb)
myNcb.ncb_command=NCBASTAT
meuNcb.ncb_lana_num=0
meuNcb.ncb_callname="* "
DimmyASTATAsASTAT,tempASTATAsASTAT
DimpASTATAsLong
myNcb.ncb_length=Len(meuASTAT)
Debug.PrintErr.LastDllError
pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONSOrHEAP_ZERO_MEMORY,myNcb.ncb_length)
SepASTAT=0Então
Debug.Print "memoryallcoationfailed!"
SairSub
FimSe
myNcb.ncb_buffer=pASTAT
bRet=Netbios(meuNcb)
Debug.PrintErr.LastDllError
CopiarMemóriameuASTAT,meuNcb.ncb_buffer,Len(meuASTAT)
MsgBoxHex(meuASTAT.adapt.adapter_address(0))&""&Hex(meuASTAT.adapt.adapter_address(1))_
&""&Hex(myASTAT.adapt.adapter_address(2))&""_
&Hex(meuASTAT.adapt.adapter_address(3))_
&""&Hex(myASTAT.adapt.adapter_address(4))&""_
&Hex(meuASTAT.adapt.adapter_address(5))
HeapFreeGetProcessHeap(),0,pASTAT
Fim Sub
4) Pressione F5 para executar o programa.
5) Clique em Comando1. Observe que o endereço da placa de rede será exibido em uma caixa de informações. ->