fdefod Postado Março 30, 2011 Denunciar Share Postado Março 30, 2011 Pessoal, vou reabrir este tópico pois estou com dúvidas. 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Março 30, 2011 Denunciar Share Postado Março 30, 2011 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!experimenteunit 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fdefod Postado Abril 26, 2011 Autor Denunciar Share Postado Abril 26, 2011 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!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 26, 2011 Denunciar Share Postado Abril 26, 2011 Este método foi o que eu estava utilizando o problema é que ele não roda em versões posteriores a do windows xpse voce compilar esse código no delphi 7 ou posterior, ele vai rodar no windows Vista e no windows 7abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fdefod Postado Dezembro 21, 2011 Autor Denunciar Share Postado Dezembro 21, 2011 Olá pessoal,Estou usando o codigo jhonas citou neste tópico. Meu problema é o seguinte: não sei porque mas quando eu ligo a vpn e tento rodar o programa ele dá o seguinte erro:alguém sabe dizer a causa deste problema. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Dezembro 31, 2011 Denunciar Share Postado Dezembro 31, 2011 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çono teste que fiz aqui com o código está funcionando corretamente ... faça um debug usando o break point abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
fdefod
Pessoal, vou reabrir este tópico pois estou com dúvidas.
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!
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
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.