close

{方法一}

function TForm1.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];


      Ncb.ncb_callname := '* ';


      Ncb.ncb_buffer := Pointer(Adapter);


      Ncb.ncb_length := SizeOf(TAdapterStatus);
      RetCode := Netbios(Ncb);


      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;

 

{方法二}

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   
    if Win32Platform <>VER_PLATFORM_WIN32_NT then   
      @Func := GetProcAddress(Lib, 'UuidCreate')  
      else @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;   
    FreeLibrary(Lib);   
  end;  
end;

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 KevinYoung 的頭像
    KevinYoung

    KevinYoung

    KevinYoung 發表在 痞客邦 留言(0) 人氣()