Connaitre Adresse MAC

Résolu
Bonjour a tous,
je me trouve sur un petit souci, je cherche comment connaitre/afficher l'adresse MAC sur delphi.
j'ai cherché et j'ai trouvé des function mais ça ne marche pas

Merci a vous

3 réponses

  1. y en a aussi celle là
    type
      TAdapterStatus = record
        adapter_address: array [0..5] of char;
        filler: array [1..4 * SizeOf(char) + 19 * SizeOf(Word) + 3 * SizeOf(DWORD)] of
        Byte;
      end;
    
      THostInfo = record
        username: PWideChar;
        logon_domain: PWideChar;
        oth_domains: PWideChar;
        logon_server: PWideChar;
      end;{record}
    
    
    function IsNetConnect: Boolean;
    begin
      if GetSystemMetrics(SM_NETWORK) and $01 = $01 then Result := True
      else
        Result := False;
    end;{function}
    
    function AdapterToString(Adapter: TAdapterStatus): string;
    begin
      with Adapter do Result :=
          Format('%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x',
          [Integer(adapter_address[0]), Integer(adapter_address[1]),
          Integer(adapter_address[2]), Integer(adapter_address[3]),
          Integer(adapter_address[4]), Integer(adapter_address[5])]);
    end;{function}
    
    function GetMacAddresses(const Machine: string;
      const Addresses: TStrings): Integer;
    const
      NCBNAMSZ = 16;        // absolute length of a net name
      MAX_LANA = 254;       // lana's in range 0 to MAX_LANA inclusive
      NRC_GOODRET = $00;       // good return
      NCBASTAT = $33;       // NCB ADAPTER STATUS
      NCBRESET = $32;       // NCB RESET
      NCBENUM = $37;       // NCB ENUMERATE LANA NUMBERS
    type
      PNCB = ^TNCB;
      TNCBPostProc = procedure(P: PNCB);
      stdcall;
      TNCB = record
        ncb_command: Byte;
        ncb_retcode: Byte;
        ncb_lsn: Byte;
        ncb_num: Byte;
        ncb_buffer: PChar;
        ncb_length: Word;
        ncb_callname: array [0..NCBNAMSZ - 1] of char;
        ncb_name: array [0..NCBNAMSZ - 1] of char;
        ncb_rto: Byte;
        ncb_sto: Byte;
        ncb_post: TNCBPostProc;
        ncb_lana_num: Byte;
        ncb_cmd_cplt: Byte;
        ncb_reserve: array [0..9] of char;
        ncb_event: THandle;
      end;
      PLanaEnum = ^TLanaEnum;
      TLanaEnum = record
        Length: Byte;
        lana: array [0..MAX_LANA] of Byte;
      end;
      ASTAT = record
        adapt: TAdapterStatus;
        namebuf: array [0..29] of TNameBuffer;
      end;
    var
      NCB: TNCB;
      Enum: TLanaEnum;
      I: integer;
      Adapter: ASTAT;
      MachineName: string;
    begin
      Result := -1;
      Addresses.Clear;
      MachineName := UpperCase(Machine);
      if MachineName = '' then    MachineName := '*';
      FillChar(NCB, SizeOf(NCB), #0);
      NCB.ncb_command := NCBENUM;
      NCB.ncb_buffer  := Pointer(@Enum);
      NCB.ncb_length  := SizeOf(Enum);
      if Word(NetBios(@NCB)) = NRC_GOODRET then
      begin
        Result := Enum.Length;
        for I := 0 to Ord(Enum.Length) - 1 do
        begin
          FillChar(NCB, SizeOf(TNCB), #0);
          NCB.ncb_command  := NCBRESET;
          NCB.ncb_lana_num := Enum.lana[I];
          if Word(NetBios(@NCB)) = NRC_GOODRET then
          begin
            FillChar(NCB, SizeOf(TNCB), #0);
            NCB.ncb_command  := NCBASTAT;
            NCB.ncb_lana_num := Enum.lana[i];
            StrLCopy(NCB.ncb_callname, PChar(MachineName), NCBNAMSZ);
            StrPCopy(@NCB.ncb_callname[Length(MachineName)],
              StringOfChar(' ', NCBNAMSZ - Length(MachineName)));
            NCB.ncb_buffer := PChar(@Adapter);
            NCB.ncb_length := SizeOf(Adapter);
            if Word(NetBios(@NCB)) = NRC_GOODRET then
              Addresses.Add(AdapterToString(Adapter.adapt));
          end;
        end;
      end;
    end;
    
    procedure TForm6.Button1Click(Sender: TObject);
    begin
    label1.Caption := GetMacAddresses;
    end;
    
    

    erreur au niveau de la derniere ligne ( label1.Caption := GetMacAddresses; )
    [dcc32 Erreur] Unit6.pas(138): E2035 Pas assez de paramètres originaux
    1. function GetMACAdress: string;
      var
        NCB: PNCB;
        Adapter: PAdapterStatus;
      
        URetCode: PChar;
        RetCode: char;
        I: integer;
        Lenum: PlanaEnum;
        _SystemID: string;
        TMPSTR: string;
      begin
        Result    := '';
        _SystemID := '';
        Getmem(NCB, SizeOf(TNCB));
        Fillchar(NCB^, SizeOf(TNCB), 0);
      
        Getmem(Lenum, SizeOf(TLanaEnum));
        Fillchar(Lenum^, SizeOf(TLanaEnum), 0);
      
        Getmem(Adapter, SizeOf(TAdapterStatus));
        Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);
      
        Lenum.Length    := chr(0);
        NCB.ncb_command := chr(NCBENUM);
        NCB.ncb_buffer  := Pointer(Lenum);
        NCB.ncb_length  := SizeOf(Lenum);
        RetCode         := Netbios(NCB);
      
        i := 0;
        repeat
          Fillchar(NCB^, SizeOf(TNCB), 0);
          Ncb.ncb_command  := chr(NCBRESET);
          Ncb.ncb_lana_num := lenum.lana[I];
          RetCode          := Netbios(Ncb);
      
          Fillchar(NCB^, SizeOf(TNCB), 0);
          Ncb.ncb_command  := chr(NCBASTAT);
          Ncb.ncb_lana_num := lenum.lana[I];
          // Must be 16
          Ncb.ncb_callname := '*               ';
      
          Ncb.ncb_buffer := Pointer(Adapter);
      
          Ncb.ncb_length := SizeOf(TAdapterStatus);
          RetCode        := Netbios(Ncb);
          //---- calc _systemId from mac-address[2-5] XOR mac-address[1]...
          if (RetCode = chr(0)) or (RetCode = chr(6)) then
          begin
            _SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '-' +
              IntToHex(Ord(Adapter.adapter_address[1]), 2) + '-' +
              IntToHex(Ord(Adapter.adapter_address[2]), 2) + '-' +
              IntToHex(Ord(Adapter.adapter_address[3]), 2) + '-' +
              IntToHex(Ord(Adapter.adapter_address[4]), 2) + '-' +
              IntToHex(Ord(Adapter.adapter_address[5]), 2);
          end;
          Inc(i);
        until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00');
        FreeMem(NCB);
        FreeMem(Adapter);
        FreeMem(Lenum);
        GetMacAdress := _SystemID;
      end;
      

      les erreurs :
      au niveau des ligne 28,35 et45
      [dcc32 Erreur] Unit6.pas(53): E2010 Types incompatibles : 'Char' et 'AnsiChar'
      1. Bonjour,

        Tu changes juste cela : RetCode: AnsiChar;

        J'ai testé et cela fonctionne
      2. @NessdarthRe-Bonjour,
        ça fonctionne,
        Merci beaucoup NessDarth pour votre aide
    2. Bonjour,

      Tu devrais donner ce que tu as trouvé, il y a peut-être une petite erreur.