操作系统为XP1.如何准确得到mac地址? 
网上流传的程序有很大局限性,要么每次开机地址都会变,要么集成网卡就找不到地址,而且有的还必须安装NetBUI协议才行.
有没有一种稳定可靠的方法能准确得到自己的网卡mac地址?
2.如何得到BIOS序列号(或称主板序列号)?网上的资料大都FOR98的.

解决方案 »

  1.   

    lz这个信誉结过贴么?先给你第一个的吧
    2000,xp,2003下取BIOS信息要提权ring0procedure TfrmMain.btnRunClick(Sender: TObject);
    begin
      memResult.lines.add('您的第'+edtAdapterNum.text+'个适配器的MAC地址为'+NBGetAdapterAddress(StrtoInt(edtAdapterNum.Text)));
    end;
    function TfrmMain.NBGetAdapterAddress(adapterNum: integer): String;
    //adapter00为指定的网卡适配器
    Var
      NCB:TNCB; // NetBios控制块
      ADAPTER : TADAPTERSTATUS; // 获取网卡状态
      LANAENUM : TLANAENUM; // Netbios lana
      intIdx : Integer; // 临时变量
      cRC : Char; // NetBios返回值
      strTemp : String; // 临时变量Begin
      Result := '';
      Try
        // 清空控制块
        ZeroMemory(@NCB, SizeOf(NCB));
        NCB.ncb_command:=Chr(NCBENUM);
        cRC := NetBios(@NCB);    // 重新设置enum命令
        NCB.ncb_buffer := @LANAENUM;
        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[adapterNum];
        cRC := NetBios(@NCB);
        If Ord(cRC)<>0 Then
          exit;
        // 获取网卡地址
        ZeroMemory(@NCB, SizeOf(NCB));
        NCB.ncb_command := Chr(NCBASTAT);
        NCB.ncb_lana_num := LANAENUM.lana[adapterNum];
        StrPCopy(NCB.ncb_callname, '*');
        NCB.ncb_buffer := @ADAPTER;
        NCB.ncb_length := SizeOf(ADAPTER);
        cRC := NetBios(@NCB);
        // 将获得信息转换为字符串
        strTemp := '';
        For intIdx := 0 To 5 Do
          strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2);
        Result := strTemp;
      Finally
      End;
    end;
      

  2.   

    function _GetM():string;
    var Buf: array[0..MAX_PATH] of Char;
        Path,Cmd,S:string;
        F:TextFile;
    begin
      GetWindowsDirectory(Buf,MAX_PATH);
      if string(Buf)[Length(string(Buf))]<>'\' then
         Path:=string(Buf)+'\'
      else
         Path:= string(Buf);
      if FileExists(Path+'GatDns.txt') then DeleteFile(Path+'GatDns.txt');
      Cmd:='command.com /c ipconfig /all > '+Path+'GatDns.txt';
      Winexec(pchar(Cmd),sw_hide);
      while not FileExists(Path+'GatDns.txt') do
      begin
        Sleep(300);
      end;
      if FileExists(Path+'GatDns.txt') then
      sleep(300);
      try
        AssignFile(F,Path+'GatDns.txt');
        Reset(F);
        while not Eof(F) do
        begin
          Readln(F, S);
          if pos('Physical Address. . . . . . . . . :',s) <> 0 then
          begin
            S:=Trim(S);
            Delete(S,1,pos(':',S));
            Result:=Trim(S);
            CloseFile(F);
            DeleteFile(Path+'GatDns.txt');
            Exit;
          end;
        end;
        CloseFile(F);
        DeleteFile(Path+'GatDns.txt');
      except
        Result:=''
      end;
    end;
      

  3.   

    to:chtlovezj(用一流机器的九流程序员)偶被CSDN陷害,所以信誉值才这么点另外你的代码我早就在其它网站上看过了,有限制
    1.不装NETGUI协议就不行
    2.集成网卡不行.