Obtendo o MAC da placa de rede
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Toda a placa de rede possui um endereço fixo, conhecido como MAC (Media Access Control), que é gravado em um dos seus chips. Esse endereço possui 12 dígitos, com o seguinte formato: 02-00-54-B5-4E-01. Convém destacar que não existem duas placas de rede com o mesmo endereço, o que torna para nós, programadores, um instrumento de identificação exclusiva do computador do usuário. A principal utilidade, consiste na geração de uma chave de segurança, contra a pirataria, para os nossos aplicativos, e que você poderá se aprofundar no tutorial sobre Sistema Shareware, aqui do site.
Até bem pouco tempo, vinha usando o número do HD (que também é uma boa opção) como forma de identificar a máquina do usuário, porque o código para a extração desse endereço MAC que eu tinha, era complicado e não confiável, pois falhava em alguns modelos de placas.
Acabei que em minhas andanças pelos fóruns, encontrei um código, que capturava o IP da máquina e achei então que esse código poderia ser adaptado para capturar o MAC. A adaptação deu certo e o código ficou bem simples.
O seu computador possui um velho sistema operacional, chamado de DOS e que é muito utilizado até hoje pelo pessoal da área de manutenção, pois existem vários comandos úteis e dentre eles está o que captura o número MAC da placa de rede. Para abrir a tela do DOS , basta rodar o comando CMD pelo executar do Windows.
Veja a tela do DOS abaixo:
Observe que foi digitado o comando GETMAC /NH /FO CSV para se obter as informações do MAC da Placa de Rede.
Pois bem, é possível, através do VBA, acionar essa tela do DOS, executar o comando GETMAC e extrair o endereço MAC.
Leia com atenção os comentários do código utilizado!
Faça o login aqui para ter acesso ao código.
Download
Segue o arquivo exemplo, com o código apresentado. Ofereço também uma codificação para transformar essa seqüência hexadecimal , em um número padronizado.
Bom estudo!
14 comentário(s) Avelino Sampaio 27/04/2021 09:01:20 Alessandra, vá na seção "Tutorias" aqui do site e abra o tutorial sobre "Shareware". Lá tem o código para o HD Bom estudo! Alessandra 26/04/2021 23:05:56 Boa Noite Avelino E se eu precisar pegar o número do hd também usando o windows 7. Grata Avelino Sampaio 13/08/2020 12:23:59 Marcondes, não conesgui captar bem o que vc deseja. Entre em contato pela seção Contato aqui do site e me forneça mais detalhes. No aguardo Marcondes Souza 13/08/2020 10:03:21 Avelino, bom dia, Gostaria de saber se tem uma possibilidade de gerar um código sequencial a partir do momento quando os caracteres forem diferentes caso contrário gere o código sequencial 001; Avelino Sampaio 06/07/2020 07:52:27 Dilton, Com algumas modificações , você pode utilizar o código acima , usando o comando IPConfig. Outra solução bem simples seria usando o WMI. Abra o VBA, rode a função abaixo e veja o resultado na janela imediata. Public Sub IP() Dim objWMIService As Object Dim strComputer As String Dim IPConfigSet Dim IPConfig Dim i strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set IPConfigSet = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE") For Each IPConfig In IPConfigSet If Not IsNull(IPConfig.IPAddress) Then For i = LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress) Debug.Print IPConfig.IPAddress(i) Next End If Next End Sub Sucesso! DILTON LAGO 29/06/2020 21:07:47 Ola, gostaria de saber se tem uma dica simples como essa para obter o IP da maquina. Jairo William Meireles Iglesias 24/06/2020 21:11:33 Avelino Sampaio, Funcionou agora ^^ Otimo trabalho. Obter o endereço de MAC do computador do cliente ajuda em um bom codigo de registro do sistema. Obrigado. Avelino Sampaio 16/06/2020 04:54:12 Jairo, fiz uma modificação no código. Por favor, baixe o exemplo novamente e faça o teste. caso não resolva, entre em contato pela seção "contato" aqui do site para eu me comunicar com você. no aguardo Avelino Sampaio 15/06/2020 07:49:17 Jairo, obrigado pela sua informação. Hoje mesmo estarei testando o código no Windows Xp e darei um retorno. Acredito que estaja faltando um tempo de espera no código para capturar o valor objTempFile. Jairo William Meireles Iglesias 14/06/2020 10:20:43 Estou usando Windows XP com SP3. A macro de segurança está desativada totalmente. Avelino Sampaio 14/06/2020 05:47:53 Jairo e Alessandro, informe a versão do Windows. Xp, Vista ou 7 ? verifiquem se a macro de segurança do Access está ativa. No aguardo Alessandro Batistuti 13/06/2020 08:59:40 Testei o cód acima e também não retornou nenhum valor. Jairo William Meireles Iglesias 12/06/2020 19:58:09 Também testei esse exemplo e não funcionou no Access. No DOS funcionou perfeitamente. Sabe dizer o porque de não ter funcionado? MARCIO MELO - RJ 11/06/2020 17:55:59 Executei o cód. no cmd / DOS funcionou, pegou a MAC mesmo c a placa de rede desconectada, não funcionou no ex. em access, e também não retornou nenhum erro. Irei análisar mais pra frente o que aconteceu, mais uma fonte de serial, forte abraço a todos... |