[Description de la fonction] Les interfaces ipX et NETBIOS nécessitent des adresses réseau. Cet article montre comment obtenir l'adresse de la carte réseau via VB via des étapes détaillées.
étape:
1) Générez des fichiers EXE standard dans Visual Basic. Form1 est créé par défaut.
2) Ajoutez un bouton de commande dans Form1, le nom par défaut est Command1.
3) Mettez le code suivant dans la partie description du Form1.
OptionExplicite
PRivateConstNCBASTAT=&H33
PrivateConstNCBNAMSZ=16
PrivateConstHEAP_ZERO_MEMORY=&H8
PrivateConstHEAP_GENERATE_EXCEPTIONS=&H4
PrivateConstNCBRESET=&H32
Type PrivéNCB
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'Reserved,doit être0
ncb_eventAsLong
Type de fin
TypeprivéADAPTER_STATUS
adapter_address(5)AsByte'AsString*6
rev_majorAsByte'Integer
réservé0AsByte'Integer
adapter_typeAsByte'Integer
rev_minorAsByte'Integer
duréeAsInteger
frmr_recvAsInteger
frmr_xmitAsInteger
iframe_recv_errAsInteger
xmit_abortsAsInteger
xmit_successAsLong
recv_successAsLong
iframe_xmit_errAsInteger
recv_buff_unavailAsInteger
t1_timeoutsAsInteger
ti_timeoutsAsInteger
Réservé1AsLong
free_ncbsAsInteger
max_cfg_ncbsAsInteger
max_ncbsAsInteger
xmit_buf_unavailAsInteger
max_dgram_sizeAsInteger
en attente_sessAsInteger
max_cfg_sessAsInteger
max_sessAsInteger
max_sess_pkt_sizeAsInteger
name_countAsInteger
Type de fin
TypeprivéNAME_BUFFER
nomAsString*NCBNAMSZ
nom_numAsInteger
name_flagsAsInteger
Type de fin
Type PrivéASTAT
adaptAsADAPTER_STATUS
NameBuff(30)En tant queNAME_BUFFER
Type de fin
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
Mettez le code suivant dans l'événement Command1_Click :
PrivateSubCommand1_Click()
DimmyNcbAsNCB
DimbRetAsByte
monNcb.ncb_command=NCBRESET
bRet = Netbios (monNcb)
myNcb.ncb_command=NCBASTAT
monNcb.ncb_lana_num=0
monNcb.ncb_callname="* "
DimmyASTATAsASTAT, tempASTATAsASTAT
DimpASTATAsLong
monNcb.ncb_length=Len(monASTAT)
Debug.PrintErr.LastDllError
pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONSOuHEAP_ZERO_MEMORY,myNcb.ncb_length)
SipASTAT=0Alors
Debug.Print "mémoryallcoationfailed!"
QuitterSub
FinSi
monNcb.ncb_buffer=pASTAT
bRet = Netbios (monNcb)
Debug.PrintErr.LastDllError
CopieMémoiremyASTAT,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(monASTAT.adapt.adapter_address(5))
HeapFreeGetProcessHeap(),0,pASTAT
FinSub
4) Appuyez sur F5 pour exécuter le programme.
5) Cliquez sur Commande1. Notez que l'adresse de la carte réseau sera affichée dans une boîte d'informations. ->