Camaradas,
Muitos aqui devem ter vivido o problema de obter o endereço MAC de um adaptador de rede wireless, quando o mesmo está desativado.
Eu escrevi uma pequena função que obtem o MAC Address mesmo que o adaptador indicado esteje desativado.
Então vamos lá:
| Delphi | | copy code | | ? |
| 01 | function AdapterMacAddress(AAdptNum: Cardinal): string; |
| 02 | type |
| 03 | PC = PCardinal; |
| 04 | PB = PByte; |
| 05 | var |
| 06 | hLib: HMODULE; |
| 07 | { Note: Type from IpHlpApi GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; |
| 08 | var pOutBufLen: ULONG): DWORD; stdcall; |
| 09 | } |
| 10 | GetAdptInfo: function(A: Pointer; var B: ULONG): DWORD; stdcall; |
| 11 | i, Size, Buff: Cardinal; |
| 12 | begin |
| 13 | Result := '-----'; |
| 14 | hLib := LoadLibrary('iphlpapi.dll'); |
| 15 | if hLib <> 0 then |
| 16 | try |
| 17 | @GetAdptInfo := GetProcAddress(hLib, 'GetAdaptersInfo'); |
| 18 | Size := 0; |
| 19 | if GetAdptInfo(nil, Size) = 111 then |
| 20 | begin |
| 21 | GetMem(Pointer(Buff), Size); |
| 22 | try |
| 23 | if GetAdptInfo(Pointer(Buff), Size) = 0 then |
| 24 | for I := PC(Buff + (640 * AAdptNum) + 400)^ - 1 downto 0 do |
| 25 | Insert(IntToHex(PB(Buff + (640 * AAdptNum) + 404 + I)^, 2), |
| 26 | Result, I + 1); |
| 27 | finally |
| 28 | FreeMem(Pointer(Buff)); |
| 29 | end; |
| 30 | end; |
| 31 | finally |
| 32 | FreeLibrary(hLib); |
| 33 | end; |
| 34 | end; |
Escrevi esse código pra não ter dependências a outras Units, mas como alguns aqui devem saber,
tudo que escrevi é baseado na Biblioteca em anexo, a IpHlpApi.
Para os curiosos vale a pena dar uma olhada nessa Lib.
Agora o mais interessante – Como usar a função acima?
Adicione um TMemo no form(coloquei o name de ‘mmoMACs’).
| Delphi | | copy code | | ? |
| 1 | mmoMACs.Lines.Add(AdapterMacAddress(0)); |
| 2 | mmoMACs.Lines.Add(AdapterMacAddress(1)); |
Nesse exemplo eu pego o MAC Address do primeiro e do segundo adaptador.
O retorno aqui ficou:
00-19-DB-9D-D0-4F
00-03-0D-7A-5D-40Respectivamente, Placa de Rede a Cabo e Placa de Rede Wireless(Desativada no switch do notebook [OFF])
Obs: Lembre-se que em programação iniciamos contagem do 0, então de 0 a 10 temos 11 elementos.
Abraço a todos
