如何取得网卡的编号!好像说网卡的编号是世上唯一的!

解决方案 »

  1.   

    function GetMacAddresses(const Machine: string; const Addresses: TStrings): Integer;
    var
      NCB: TNCB;
      Enum: TLanaEnum;
      I, L, NameLen: Integer;
      Adapter: ASTAT;
      MachineName: string;
    begin
      Result := -1;
      Addresses.Clear;
      MachineName := UpperCase(Machine);
      if MachineName = '' then
        MachineName := '*';
      NameLen := Length(MachineName);
      L := NCBNAMSZ - NameLen;
      if L > 0 then
      begin
        SetLength(MachineName, NCBNAMSZ);
        FillChar(MachineName[NameLen + 1], L, ' ');
      end;
      FillChar(NCB, SizeOf(NCB), #0);
      NCB.ncb_command := NCBENUM;
      NCB.ncb_buffer := Pointer(@Enum);
      NCB.ncb_length := SizeOf(Enum);
      if NetBios(@NCB) = NRC_GOODRET then
      begin
        Result := Enum.Length;
        for I := 0 to Ord(Enum.Length) - 1 do
        begin
          FillChar(NCB, SizeOf(NCB), #0);
          NCB.ncb_command := NCBRESET;
          NCB.ncb_lana_num := Enum.lana[I];
          if NetBios(@NCB) = NRC_GOODRET then
          begin
            FillChar(NCB, SizeOf(NCB), #0);
            NCB.ncb_command := NCBASTAT;
            NCB.ncb_lana_num := Enum.lana[I];
            Move(MachineName[1], NCB.ncb_callname, SizeOf(NCB.ncb_callname));
            NCB.ncb_buffer := PChar(@Adapter);
            NCB.ncb_length := SizeOf(Adapter);
            if NetBios(@NCB) = NRC_GOODRET then
              Addresses.Add(AdapterToString(Adapter.adapt));
          end;
        end;
      end;
    end;
      

  2.   

    How to Get MacAddress of LAN cardunit MACAddress;interfaceuses SysUtils;type
      TMACAddress = packed array[0..5] of Byte;
     
      ENetBiosError = class(Exception);function LanAdapterCount : Integer;function GetMacAddress(AdapterNum: Integer):TMACAddress;
    implementationuses NB30, Windows;resourcestring
      sNetBiosError = 'NetBIOS error %d';type
      TAStat = record
        Adapt    : TAdapterStatus;
        NameBuff : array[0..30] of TNameBuffer;
      end;function LanAdapterCount : Integer;
    var
      Ncb : TNCB;
      uRetCode : Char;
      lEnum : TLanaEnum;
    begin
      FillChar( NCB, SizeOf(NCB), 0 );
      with NCB do begin
        ncb_command := Char( NCBENUM );
        ncb_buffer  := @lEnum;
        ncb_length  := SizeOf(lEnum);
      end;
      uRetCode := Netbios( @Ncb );
      if uRetCode <> #0 then 
       raise Exception.CreateFmt( sNetBIOSError,
                                          [Ord(uRetCode)]);
      Result := Ord(lenum.length);
    end;function GetMacAddress(AdapterNum:Integer):TMACAddress;
    var
      Ncb : TNCB;
      uRetCode : Char;
      J : Integer;
      Adapter : TAStat;
    begin
      FillChar( NCB, SizeOf(NCB), 0 );
      with NCB do begin
        ncb_command := Char(NCBRESET);
        ncb_lana_num := Char( AdapterNum );
      end;
      uRetCode := Netbios( @Ncb );
      if uRetCode <> #0 then 
       raise Exception.CreateFmt(sNetBIOSError,
                                         [Ord(uRetCode)]);
      FillChar( NCB, SizeOf(NCB), 0 );
      with NCB do begin
        ncb_command := Char(NCBASTAT);
        ncb_lana_num := Char( AdapterNum );
        StrCopy( ncb_callname,  '*                ' );
        ncb_buffer := @Adapter;
        ncb_length := sizeof(Adapter);
      end;
      uRetCode := Netbios( @Ncb );
      if uRetCode <> #0 then 
       raise Exception.CreateFmt(sNetBIOSError,
                                         [Ord(uRetCode)]);
      for J := 0 to 5 do
       Result[J] := Ord( Adapter.Adapt.Adapter_address[J]);
    end;
      

  3.   


    Function GetAdapterMac(ANo:Integer):String;
    var
       Ncb:TNcb; 
       Adapter:TAdapterStatus;  
       Lanaenum:TLanaenum;     
       IntIdx:Integer;       //
       cRc:Char;             
       StrTemp:String;
    begin
       Result:='';
       Try
          ZeroMemory(@Ncb,SizeOf(Ncb));  
          Ncb.ncb_command:=Chr(NCbenum);  
          NetBios(@NCb);
          Ncb.ncb_buffer:=@Lanaenum;  //再处理enum命令
          Ncb.ncb_length:=SizeOf(Lanaenum);
          cRc:=NetBios(@Ncb);
          if Ord(cRc)<>0 then
             exit;
          ZeroMemory(@Ncb,SizeOf(Ncb)); //适配器清零
          Ncb.ncb_command:=Chr(NcbReset);
          Ncb.ncb_lana_num:=Lanaenum.lana[aNo];
          cRc:=NetBios(@Ncb);
          if Ord(cRc)<>0 then
             exit;
          //得到适配器状态
          ZeroMemory(@Ncb,SizeOf(Ncb));
          Ncb.ncb_command:=Chr(NcbAstat);
          Ncb.ncb_lana_num:=Lanaenum.lana[aNo];
          StrPcopy(Ncb.ncb_callname,'*');
          Ncb.ncb_buffer:=@Adapter;
          Ncb.ncb_length:=SizeOf(Adapter);
          NetBios(@Ncb);      //将mac地址转换成字符串输出
          StrTemp:='';
          For IntIdx:=0 to 5 do
             StrTemp:=StrTemp+IntToHex(Integer(Adapter.adapter_address[intIdx]),2);
          Result:=StrTemp;
       Finally
       end;
    end;
    要uses nb30单元
     GetAdapterMac(0);//返回第一块网卡号
    这样就可以了给分吧!