请教:如何得到本机网卡的序列号?

解决方案 »

  1.   

    读取网卡上的mac 地址应该unit MacAdress;interface
    uses SysUtils,NB30, Classes, Controls, StdCtrls,windows;function  Getmac:string;implementationtype
    PASTAT = ^TASTAT;
      TASTAT = record
        adapter : TAdapterStatus;
        name_buf : TNameBuffer;
    end;function  Getmac:string;
    var
      ncb : TNCB;
      s:string;
      adapt : TASTAT;
      lanaEnum : TLanaEnum;
      i, j, m : integer;
      strPart, strMac : string;
    begin
      result:='';
      FillChar(ncb, SizeOf(TNCB), 0);
      ncb.ncb_command := Char(NCBEnum);
      ncb.ncb_buffer := PChar(@lanaEnum);
      ncb.ncb_length := SizeOf(TLanaEnum);
      s:=Netbios(@ncb);
      m:=1;
      if (Win32Platform = VER_PLATFORM_WIN32_WINDOWS) then
      m:=0;
      for i := 0 to integer(lanaEnum.length)-1 do
      begin
        FillChar(ncb, SizeOf(TNCB), 0);
        ncb.ncb_command := Char(NCBReset);
        ncb.ncb_lana_num := lanaEnum.lana[i];
        Netbios(@ncb);
        Netbios(@ncb);
        FillChar(ncb, SizeOf(TNCB), 0);
        ncb.ncb_command := Chr(NCBAstat);
        ncb.ncb_lana_num := lanaEnum.lana[i];
        ncb.ncb_callname := '*               ';
        ncb.ncb_buffer := PChar(@adapt);
        ncb.ncb_length := SizeOf(TASTAT);   if m=1 then
        begin
          if Netbios(@ncb) = Chr(0) then
          strMac := '';      
          for j := 0 to 5 do
          begin
            strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
            strMac := strMac + strPart ;
          end;
          SetLength(strMac, Length(strMac));
        end;
      if m=0 then
        if Netbios(@ncb) <> Chr(0) then
        begin
          strMac := '';
          for j := 0 to 5 do
          begin
            strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
            strMac := strMac + strPart ;
          end;
          SetLength(strMac, Length(strMac));
        end;
      end;
      result:=trim(strmac);
    end;
      

  2.   

    多谢:suny_2001(小鱼儿) 我也是鱼