[Descripción de la función] Las interfaces ipX y NETBIOS requieren direcciones de red. Este artículo demuestra cómo obtener la dirección de la tarjeta de red a través de VB mediante pasos detallados.
paso:
1) Genere archivos EXE estándar en VisualBasic. Form1 se crea de forma predeterminada.
2) Agregue un botón de comando en Form1, el nombre predeterminado es Comando1.
3) Coloque el siguiente código en la parte de descripción de Form1.
OpciónExplícito
PRIvateConstNCBASTAT=&H33
PrivadoConstNCBNAMSZ=16
PrivadoConstHEAP_ZERO_MEMORY=&H8
PrivadoConstHEAP_GENERATE_EXCEPTIONS=&H4
PrivadoConstNCBRESET=&H32
PrivadoTipoNCB
ncb_commandAsByte'Entero
ncb_retcodeAsByte'Integer
ncb_lsnAsByte'Integer
ncb_numAsByte'Entero
ncb_bufferAsLong'String
ncb_lengthAsInteger
ncb_callnameAsString*NCBNAMSZ
ncb_nameAsString*NCBNAMSZ
ncb_rtoAsByte'Integer
ncb_stoAsByte'Integer
ncb_postAsLong
ncb_lana_numAsByte'Entero
ncb_cmd_cpltAsByte'Entero
ncb_reserve(9)ComoByte'Reservado,debe0
ncb_eventAsLong
Tipo final
Tipo privadoADAPTER_STATUS
dirección_adaptador(5)AsByte'AsString*6
rev_majorAsByte'Entero
reservado0AsByte'Entero
tipo_adaptadorAsByte'Entero
rev_minorAsByte'Entero
duraciónAsInteger
frmr_recvAsInteger
frmr_xmitAsInteger
iframe_recv_errAsInteger
xmit_abortsAsInteger
xmit_successAsLong
recv_successAsLong
iframe_xmit_errAsInteger
recv_buff_unavailAsInteger
t1_timeoutsAsInteger
ti_timeoutsAsInteger
Reservado1Como Largo
free_ncbsAsInteger
max_cfg_ncbsAsInteger
max_ncbsAsInteger
xmit_buf_unavailAsInteger
max_dgram_sizeAsInteger
pendiente_sessAsInteger
max_cfg_sessAsInteger
max_sessAsInteger
max_sess_pkt_sizeAsInteger
nombre_countAsInteger
Tipo final
TipoPrivadoNAME_BUFFER
nombreAsString*NCBNAMSZ
nombre_numAsInteger
nombre_flagsAsInteger
Tipo final
Tipo privadoASTAT
adaptarAsADAPTER_STATUS
NombreBuff(30)ComoNAME_BUFFER
Tipo final
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 el siguiente código en el evento Command1_Click:
PrivadoSubCommand1_Click()
DimmyNcbAsNCB
DimbRetAsByte
myNcb.ncb_command=NCBRESET
bRet=Netbios(miNcb)
myNcb.ncb_command=NCBASTAT
myNcb.ncb_lana_num=0
myNcb.ncb_callname="* "
DimmyASTATAsASTAT,tempASTATAsASTAT
DimpASTATAsLargo
myNcb.ncb_length=Len(miASTAT)
Debug.PrintErr.LastDllError
pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONSOrHEAP_ZERO_MEMORY,myNcb.ncb_length)
SipASTAT=0Entonces
Depurar.Imprimir "memoryallcoationfailed!"
SalirSub
Fin si
myNcb.ncb_buffer=pASTAT
bRet=Netbios(miNcb)
Debug.PrintErr.LastDllError
CopiarMemoriamyASTAT,myNcb.ncb_buffer,Len(myASTAT)
MsgBoxHex(myASTAT.adapt.adapter_address(0))&""&Hex(myASTAT.adapt.adapter_address(1))_
&""&Hex(myASTAT.adapt.adapter_address(2))&""_
&Hexadecimal(myASTAT.adapt.adapter_address(3))_
&""&Hex(myASTAT.adapt.adapter_address(4))&""_
&Hexadecimal(myASTAT.adapt.adapter_address(5))
HeapFreeGetProcessHeap(),0,pASTAT
FinSub
4) Presione F5 para ejecutar el programa.
5) Haga clic en Comando1. Tenga en cuenta que la dirección de la tarjeta de red se mostrará en un cuadro de información. ->