取MAC地址(集成网卡和非集成网卡)

取MAC地址(集成网卡和非集成网卡):  
  uses  
      nb30;  
   
  type  
  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  
  FillChar(ncb,   SizeOf(TNCB),   0);  
      ncb.ncb_command   :=   Char(NCBEnum);  
      ncb.ncb_buffer   :=   PChar(@lanaEnum);  
      ncb.ncb_length   :=   SizeOf(TLanaEnum);  
      s:=Netbios(@ncb);  
      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);  
          m:=0;  
          if   (Win32Platform   =   VER_PLATFORM_WIN32_NT)   then  
          m:=1;  
          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)-1);  
          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)-1);  
          end;  
      end;  
  result:=strmac;  
  end;  
   
  function   PartitionString(StrV,PrtSymbol:   string):   TStringList;  
  var  
      iTemp:   integer;  
  begin  
      result   :=   TStringList.Create;  
      iTemp   :=   pos(PrtSymbol,StrV);  
      while   iTemp>0   do   begin  
          if   iTemp>1   then   result.Append(copy(StrV,1,iTemp-1));  
          delete(StrV,1,iTemp+length(PrtSymbol)-1);  
          iTemp   :=   pos(PrtSymbol,StrV);  
      end;  
      if   Strv<>''   then   result.Append(StrV);  
  end;  
   
  function   MacStr():String;  
  var  
      Str:TStrings;  
      i:Integer;  
      MacStr:String;  
  begin  
      MacStr:='';  
      Str:=TStringList.Create;  
      Str:=PartitionString(Getmac,'-');  
      for   i:=0   to   Str.Count-1   do  
          MacStr:=MacStr+Str[i];  
      Result:=MacStr;  
  end;  
   
  调用:  
  Edit1.text:=MacStr;

Posted in 软件开发 by 傻猫 at January 22, 2007.
Tags: none

添加新评论