[Funktionsbeschreibung] Die ipX- und NETBIOS-Schnittstellen erfordern Netzwerkadressen. In diesem Artikel wird anhand detaillierter Schritte gezeigt, wie Sie die Netzwerkkartenadresse über VB erhalten.
Schritt:
1) Generieren Sie Standard-EXE-Dateien in VisualBasic. Form1 wird standardmäßig erstellt.
2) Fügen Sie in Form1 eine Befehlsschaltfläche hinzu. Der Standardname lautet Command1.
3) Fügen Sie den folgenden Code in den Beschreibungsteil von Form1 ein.
OptionExplicit
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'Reserved,muss0 sein
ncb_eventAsLong
EndType
PrivateTypeADAPTER_STATUS
adapter_address(5)AsByte'AsString*6
rev_majorAsByte'Integer
reserviert0AsByte'Integer
adapter_typeAsByte'Integer
rev_minorAsByte'Integer
DauerAsInteger
frmr_recvAsInteger
frmr_xmitAsInteger
iframe_recv_errAsInteger
xmit_abortsAsInteger
xmit_successAsLong
recv_successAsLong
iframe_xmit_errAsInteger
recv_buff_unavailAsInteger
t1_timeoutsAsInteger
ti_timeoutsAsInteger
Reserved1AsLong
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
EndType
PrivateTypeNAME_BUFFER
nameAsString*NCBNAMSZ
name_numAsInteger
name_flagsAsInteger
EndType
PrivateTypeASTAT
adaptAsADAPTER_STATUS
NameBuff(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
Fügen Sie den folgenden Code in das Command1_Click-Ereignis ein:
PrivateSubCommand1_Click()
DimmyNcbAsNCB
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=Len(myASTAT)
Debug.PrintErr.LastDllError
pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONSOrHEAP_ZERO_MEMORY,myNcb.ncb_length)
WennpASTAT=0Dann
Debug.Print „memoryallcoationfailed!“
ExitSub
EndIf
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) Drücken Sie F5, um das Programm auszuführen.
5) Klicken Sie auf Befehl1. Beachten Sie, dass die Netzwerkkartenadresse in einem Informationsfeld angezeigt wird. ->