Ir para conteúdo
Fórum Script Brasil
  • 0

Pegando o Endereço MAC da Placa de Rede


fdefod

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0
Quando uso o 1º metódo mostrado acima na minha maquina, ele me retorna o endereço MAC errado! tenho 3 placas de rede e ele está me retornando a que esta desativada!

experimente

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses NB30;

function AdapterMacAddress(AAdptNum: Cardinal): string;
type
   PC = PCardinal;
   PB = PByte;
var
   hLib: HMODULE;
   { Note: Type from IpHlpApi GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;
     var pOutBufLen: ULONG): DWORD; stdcall;
   }
   GetAdptInfo: function(A: Pointer; var B: ULONG): DWORD; stdcall;
   i, Size, Buff: Cardinal;
begin
   Result := '-----';
   hLib := LoadLibrary('iphlpapi.dll');
   if hLib <> 0 then
     try
       @GetAdptInfo := GetProcAddress(hLib, 'GetAdaptersInfo');
       Size := 0;
       if GetAdptInfo(nil, Size) = 111 then
       begin
         GetMem(Pointer(Buff), Size);
         try
           if GetAdptInfo(Pointer(Buff), Size) = 0 then
             for I := PC(Buff + (640 * AAdptNum) + 400)^ - 1 downto 0 do
               Insert(IntToHex(PB(Buff + (640 * AAdptNum) + 404 + I)^, 2),
                 Result, I + 1);
         finally
           FreeMem(Pointer(Buff));
         end;
       end;
     finally
       FreeLibrary(hLib);
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   //PEGAR O ENDEREÇO MAC DAS PLACAS DE REDE E WIRELESS INSTALADAS

   Memo1.Lines.Add(AdapterMacAddress(0)); // 1º Adaptador de Rede

   // SE TIVER MAIS DE UM ADAPTADOR DE REDE

   Memo1.Lines.Add(AdapterMacAddress(1)); // 2º Adaptador de Rede
   Memo1.Lines.Add(AdapterMacAddress(2)); // 3º Adaptador de Rede
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Este método foi o que eu estava utilizando o problema é que ele não roda em versões posteriores a do windows xp por mexer com netbios.

O método a que eu me refiria acima é este:

CODE

function MacAddress: string;

var

Lib: Cardinal;

Func: function(GUID: PGUID): Longint; stdcall;

GUID1, GUID2: TGUID;

begin

Result := '';

Lib := LoadLibrary('rpcrt4.dll');

if Lib <> 0 then

begin

@Func := GetProcAddress(Lib, 'UuidCreateSequential');

if Assigned(Func) then

begin

if (Func(@GUID1) = 0) and

(Func(@GUID2) = 0) and

(GUID1.D4[2] = GUID2.D4[2]) and

(GUID1.D4[3] = GUID2.D4[3]) and

(GUID1.D4[4] = GUID2.D4[4]) and

(GUID1.D4[5] = GUID2.D4[5]) and

(GUID1.D4[6] = GUID2.D4[6]) and

(GUID1.D4[7] = GUID2.D4[7]) then

begin

Result :=

IntToHex(GUID1.D4[2], 2) + '-' +

IntToHex(GUID1.D4[3], 2) + '-' +

IntToHex(GUID1.D4[4], 2) + '-' +

IntToHex(GUID1.D4[5], 2) + '-' +

IntToHex(GUID1.D4[6], 2) + '-' +

IntToHex(GUID1.D4[7], 2);

end;

end;

end;

end;

Para chamar:

CODE

Edit1.Text:=MacAddress;

O problema é que este aí pega uma placa aleatória e mostra. Ou seja se eu tiver mais de uma instalada ele podera mostrar a que esta desativada, como já aconteceu em testes aqui.

alguém saberia como modifica-la ou outro método que funcione no windows 7 que eu possa pegar os endereços macs!!

Link para o comentário
Compartilhar em outros sites

  • 0

Erro de violação de endereço de memória... ocorre quando uma posição de memoria já esta preenchida com um valor e o programa tenta escrever nesse endereço

no teste que fiz aqui com o código está funcionando corretamente ... faça um debug usando o break point

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...