GARANTIR DESCONTO

Fórum placa de rede #269065

17/02/2005

0

como faço para obter o número da minha placa de rede, gostaria de colocar um edit eum botão, e no edit apareceria o número da placa de rede, desde já valeu!!!!


Bigode

Bigode

Responder

Posts

18/02/2005

Sanses

oi

Se quer pegar o endereço dela não é? o MAC adress?

Se for faça assim coloque um buton e um label no seu form e declare esta função:
function GetMacAddress(const AServerName : string) : string;
type
     TNetTransportEnum = function(pszServer : PWideChar;
                                  Level : DWORD; 
                                  var pbBuffer : pointer;
                                  PrefMaxLen : LongInt;
                                  var EntriesRead : DWORD;
                                  var TotalEntries : DWORD; 
                                  var ResumeHandle : DWORD) : DWORD; stdcall;

     TNetApiBufferFree = function(Buffer : pointer) : DWORD; stdcall;

     PTransportInfo = ^TTransportInfo;
     TTransportInfo = record 
                       quality_of_service : DWORD;
                       number_of_vcs : DWORD; 
                       transport_name : PWChar;
                       transport_address : PWChar;
                       wan_ish : boolean;
                     end;

var E,ResumeHandle,
    EntriesRead,
    TotalEntries : DWORD;
    FLibHandle : THandle;
    sMachineName,
    sMacAddr,
    Retvar : string;
    pBuffer : pointer;
    pInfo : PTransportInfo;
    FNetTransportEnum : TNetTransportEnum;
    FNetApiBufferFree : TNetApiBufferFree;
    pszServer : array[0..128] of WideChar;
    i,ii,iIdx : integer;
begin
  sMachineName := trim(AServerName);
  Retvar := ´00-00-00-00-00-00´;

  // Add leading \\ if missing
  if (sMachineName <> ´´) and (length(sMachineName) >= 2) then begin
    if copy(sMachineName,1,2) <> ´\\´ then 
      sMachineName := ´\\´ + sMachineName
  end; 

  // Setup and load from DLL
  pBuffer := nil;
  ResumeHandle := 0; 
  FLibHandle := LoadLibrary(´NETAPI32.DLL´);

  // Execute the external function
  if FLibHandle <> 0 then begin
    @FNetTransportEnum := GetProcAddress(FLibHandle,´NetWkstaTransportEnum´);
    @FNetApiBufferFree := GetProcAddress(FLibHandle,´NetApiBufferFree´); 
    E := FNetTransportEnum(StringToWideChar(sMachineName,pszServer,129),0,
                           pBuffer,-1,EntriesRead,TotalEntries,Resumehandle); 

    if E = 0 then begin
      pInfo := pBuffer;

      // Enumerate all protocols - look for TCPIP
      for i := 1 to EntriesRead do begin 
        if pos(´TCPIP´,UpperCase(pInfo^.transport_name)) <> 0 then begin
          // Got It - now format result ´xx-xx-xx-xx-xx-xx´
          iIdx := 1;
          sMacAddr := pInfo^.transport_address; 

          for ii := 1 to 12 do begin 
            Retvar[iIdx] := sMacAddr[ii];
            inc(iIdx);
            if iIdx in [3,6,9,12,15] then inc(iIdx);
          end; 
        end;

        inc(pInfo);
      end;
      if pBuffer <> nil then FNetApiBufferFree(pBuffer);
    end;

    try
      FreeLibrary(FLibHandle);
    except
      // Silent Error
    end;
  end;

  Result := Retvar;
end;


Depois no evento click do botão :
edit1.text:=GetMacAddress(edit1.text);


Feito isso vc digita o nome do pc no edit e clica no botão, acho que pega até pela rede...
Se tiver um uso a respeito desta função, poste aqui pra que vai usar. Gostaria de saber qual a finalidade dela, pois tenho um aplicativo em rede e queria melhorar a conexão, mas não sei como usar o MAC address. Aguardo retorno

Sanses


Responder

Gostei + 0

18/02/2005

Bigode

não funcionou, exibe um erro de ´access violation at address 000000009´


Responder

Gostei + 0

18/02/2005

Sanses

acredito que vc fez alguma coisa errada. Veja como ficou a unit do exemplo que montei aqui:

unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetMacAddress(const AServerName : string) : string; 
type
     TNetTransportEnum = function(pszServer : PWideChar; 
                                  Level : DWORD; 
                                  var pbBuffer : pointer; 
                                  PrefMaxLen : LongInt; 
                                  var EntriesRead : DWORD; 
                                  var TotalEntries : DWORD;
                                  var ResumeHandle : DWORD) : DWORD; stdcall; 

     TNetApiBufferFree = function(Buffer : pointer) : DWORD; stdcall; 

     PTransportInfo = ^TTransportInfo; 
     TTransportInfo = record
                       quality_of_service : DWORD; 
                       number_of_vcs : DWORD; 
                       transport_name : PWChar; 
                       transport_address : PWChar; 
                       wan_ish : boolean; 
                     end;

var E,ResumeHandle, 
    EntriesRead, 
    TotalEntries : DWORD; 
    FLibHandle : THandle; 
    sMachineName,
    sMacAddr, 
    Retvar : string; 
    pBuffer : pointer; 
    pInfo : PTransportInfo; 
    FNetTransportEnum : TNetTransportEnum; 
    FNetApiBufferFree : TNetApiBufferFree;
    pszServer : array[0..128] of WideChar; 
    i,ii,iIdx : integer; 
begin 
  sMachineName := trim(AServerName); 
  Retvar := ´00-00-00-00-00-00´; 

  // Add leading \\ if missing 
  if (sMachineName <> ´´) and (length(sMachineName) >= 2) then begin 
    if copy(sMachineName,1,2) <> ´\\´ then 
      sMachineName := ´\\´ + sMachineName 
  end; 

  // Setup and load from DLL 
  pBuffer := nil; 
  ResumeHandle := 0; 
  FLibHandle := LoadLibrary(´NETAPI32.DLL´); 

  // Execute the external function
  if FLibHandle <> 0 then begin 
    @FNetTransportEnum := GetProcAddress(FLibHandle,´NetWkstaTransportEnum´); 
    @FNetApiBufferFree := GetProcAddress(FLibHandle,´NetApiBufferFree´); 
    E := FNetTransportEnum(StringToWideChar(sMachineName,pszServer,129),0, 
                           pBuffer,-1,EntriesRead,TotalEntries,Resumehandle);

    if E = 0 then begin 
      pInfo := pBuffer; 

      // Enumerate all protocols - look for TCPIP
      for i := 1 to EntriesRead do begin 
        if pos(´TCPIP´,UpperCase(pInfo^.transport_name)) <> 0 then begin 
          // Got It - now format result ´xx-xx-xx-xx-xx-xx´ 
          iIdx := 1; 
          sMacAddr := pInfo^.transport_address;

          for ii := 1 to 12 do begin 
            Retvar[iIdx] := sMacAddr[ii]; 
            inc(iIdx);
            if iIdx in [3,6,9,12,15] then inc(iIdx); 
          end; 
        end; 

        inc(pInfo); 
      end; 
      if pBuffer <> nil then FNetApiBufferFree(pBuffer);
    end; 

    try
      FreeLibrary(FLibHandle);
    except
      // Silent Error
    end;
  end;

  Result := Retvar;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text:=GetMacAddress(edit1.text);
end;

end.


NÃO se esqueça que voce tem que digitar o nome do computador no edit para que a função procure seu MAC Adress

Sanses


Responder

Gostei + 0

19/02/2005

Sanses

olá

E ai amigo, funcionou agora??

Espero que sim...

Me diga qual a finalidade desta função, ou seja, em que ela vai ajudar, estou interessado...pois não encontrei nenhuma forma de utilizar essa informação no delphi. Obrigado!

Sanses


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar