[AccessD] Mac address

MartyConnelly martyconnelly at shaw.ca
Sat Jan 3 14:06:35 CST 2004


If you have WinXP Pro
from cmd window
Getmac /V /FO List
You can also get via WMI with code


John W. Colby wrote:

>Nope, comes back 0:0:0:0
>
>I have found a half dozen solutions, and all do this.  It appears to be a
>case of which protocol you are bound to.  This uses netbios which
>(apparently) my computer isn't using.
>
>It seems like a network card, or it's driver, could just be asked what the
>mac address is.
>
>John W. Colby
>www.ColbyConsulting.com
>
>-----Original Message-----
>From: accessd-bounces at databaseadvisors.com
>[mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Stuart
>McLachlan
>Sent: Friday, January 02, 2004 9:52 PM
>To: Access Developers discussion and problem solving
>Subject: Re: [AccessD] Mac address
>
>
>On 2 Jan 2004 at 19:53, John W. Colby wrote:
>
>  
>
>>Does anyone have code for retrieving the Mac address of the network card
>>    
>>
>in
>  
>
>>a PC?
>>
>>    
>>
>
>This will do it. I got it from
>http://www.vbadmincode.btinternet.co.uk/code.htm:
>
>
>Private Const NCBASTAT = &H33
>Private Const NCBNAMSZ = 16
>Private Const HEAP_ZERO_MEMORY = &H8
>Private Const HEAP_GENERATE_EXCEPTIONS = &H4
>Private Const NCBRESET = &H32
>
>Private Type NCB
>
>        ncb_command As Byte 'Integer
>        ncb_retcode As Byte 'Integer
>        ncb_lsn As Byte 'Integer
>        ncb_num As Byte ' Integer
>        ncb_buffer As Long 'String
>        ncb_length As Integer
>        ncb_callname As String * NCBNAMSZ
>        ncb_name As String * NCBNAMSZ
>        ncb_rto As Byte 'Integer
>        ncb_sto As Byte ' Integer
>        ncb_post As Long
>        ncb_lana_num As Byte 'Integer
>        ncb_cmd_cplt As Byte  'Integer
>        ncb_reserve(9) As Byte ' Reserved, must be 0
>        ncb_event As Long
>   End Type
>   Private Type ADAPTER_STATUS
>        adapter_address(5) As Byte 'As String * 6
>        rev_major As Byte 'Integer
>        reserved0 As Byte 'Integer
>        adapter_type As Byte 'Integer
>        rev_minor As Byte 'Integer
>        duration As Integer
>        frmr_recv As Integer
>        frmr_xmit As Integer
>        iframe_recv_err As Integer
>        xmit_aborts As Integer
>        xmit_success As Long
>        recv_success As Long
>        iframe_xmit_err As Integer
>        recv_buff_unavail As Integer
>        t1_timeouts As Integer
>        ti_timeouts As Integer
>        Reserved1 As Long
>        free_ncbs As Integer
>        max_cfg_ncbs As Integer
>        max_ncbs As Integer
>        xmit_buf_unavail As Integer
>        max_dgram_size As Integer
>        pending_sess As Integer
>        max_cfg_sess As Integer
>        max_sess As Integer
>        max_sess_pkt_size As Integer
>        name_count As Integer
>   End Type
>   Private Type NAME_BUFFER
>        name  As String * NCBNAMSZ
>        name_num As Integer
>        name_flags As Integer
>   End Type
>   Private Type ASTAT
>        adapt As ADAPTER_STATUS
>        NameBuff(30) As NAME_BUFFER
>   End Type
>
>   Private Declare Function Netbios Lib "netapi32.dll" _
>           (pncb As NCB) As Byte
>   Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
>           hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
>   Private Declare Function GetProcessHeap Lib "kernel32" () As Long
>   Private Declare Function HeapAlloc Lib "kernel32" _
>           (ByVal hHeap As Long, ByVal dwFlags As Long, _
>           ByVal dwBytes As Long) As Long
>   Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, _
>           ByVal dwFlags As Long, lpMem As Any) As Long
>
>   Sub Command0_Click()
>       Dim myNcb As NCB
>       Dim bRet As Byte
>       myNcb.ncb_command = NCBRESET
>       bRet = Netbios(myNcb)
>
>       myNcb.ncb_command = NCBASTAT
>       myNcb.ncb_lana_num = 0
>       myNcb.ncb_callname = "*               "
>
>       Dim myASTAT As ASTAT, tempASTAT As ASTAT
>       Dim pASTAT As Long
>       myNcb.ncb_length = Len(myASTAT)
>       Debug.Print Err.LastDllError
>       pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS _
>                Or HEAP_ZERO_MEMORY, myNcb.ncb_length)
>       If pASTAT = 0 Then
>          Debug.Print "memory allcoation failed!"
>          Exit Sub
>       End If
>       myNcb.ncb_buffer = pASTAT
>       bRet = Netbios(myNcb)
>       Debug.Print Err.LastDllError
>       CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)
>       MsgBox Hex(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))
>       HeapFree GetProcessHeap(), 0, pASTAT
>   End Sub
>
>--
>Lexacorp Ltd
>http://www.lexacorp.com.pg
>Information Technology Consultancy, Software Development,System
>Support.
>
>
>
>_______________________________________________
>AccessD mailing list
>AccessD at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/accessd
>Website: http://www.databaseadvisors.com
>
>
>
>_______________________________________________
>AccessD mailing list
>AccessD at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/accessd
>Website: http://www.databaseadvisors.com
>
>  
>

-- 
Marty Connelly
Victoria, B.C.
Canada





More information about the AccessD mailing list