取CMOS里的数据倒是非常容易。
不过似乎你所需要的数据应该不在CMOS里吧。

解决方案 »

  1.   

    取CMOS里的数据倒是非常容易。就通过0x70,0x71端口操作就可以了。
    不过似乎你所需要的数据不在CMOS里吧。
      

  2.   

    西西,你们也太朴实了吧!读地址?为什麽不读WIN 的注册表呢?
      

  3.   

    请问syz,能不能给出包含具体信息的注册表的主键.
      

  4.   

    见PNP规范吧.MS有公开的方法获取PNP设备的信息.
    如果你要的设备不是PNP的,JUST FORGET ABOUT IT.
      

  5.   

    转贴一份:    在开发应用程序时,增加一项显示计算机系统信息的功能,例如已安装的软盘、硬盘、光驱、网络驱动器,硬盘的容量和剩余空间,显示器分辨率、键盘类型、鼠标的键数,内存大小、CPU类型,Windows 的版本号、产品标识、注册用户单位名和用户名、当前操作用户名等(见运行图示),当然还有更多的信息,这样会使你的程序更友好。其实,有很多应用程序就是这样做的。    通过调用Windows的API函数和访问Windows注册表,可以获取大量的系统信息。Delphi为绝大多数Windows API函数提供了调用接口(可参见DELPHI3\SOURCE\RTL\WIN\windows.pas 文 件),并提供了 一个功能全面的TRegistry 类,使我们可以方便的调用Windows API函数和访问注册表,例如: ---- 1、function GetDriveType(lpRootPathName: PChar): UINT;返回指定驱动器的类型。---- 2、function GetDiskFreeSpace(lpRootPathName: PChar,var lpSectorsPerCluster, lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters: DWORD): BOOL; 返回指定驱动器的总簇数、剩余簇数及每簇扇区数、每扇区字节数,从而可以计算出总容量和剩余空间。 ---- 3、function GetSystemMetrics(SM_CXSCREEN或 SM_CYSCREEN): Integer; 返回显示器分辨 率。 ---- 4、function GetSystemMetrics(SM_CMOUSEBUTTONS): Integer; 返回鼠标的按键数目。 ---- 5、 在windows注册表的HKEY_LOCAL_MACHINE\ software\microsoft\windows\currentversion \RegisteredOwner 主键下存放着Windows 安装时输入的用户名,可用以下语句读取。 myreg:=Tregistry.Create; 
    //必须在程序单元的uses部分加入Registry
       myreg.RootKey:=HKEY_LOCAL_MACHINE;
       if myreg.openkey('software\microsoft
       \windows\currentversion',false) then
    memo1.lines.add(' 注册用户名: 
    '+myreg.readstring('RegisteredOwner'));
       myreg.closekey;---- 以上仅举几例,获取其他一些信息的方法与此类似,详见源程序。 ---- 本程序在Pwin95、Delphi3下调试通过。 ---- 附:源程序清单。 unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Classes,
      Graphics, Controls, Forms, Dialogs,
      StdCtrls,Registry;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    {$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var i,x,y:integer;
    ch:char;
    //驱动器字符'A'~'Z'
        buffer:string;
    cpuinfo:TSYSTEMINFO;
    //存放系统信息的记录类型,在Windows.pas中查到详细内容。
    meminfo:TMemoryStatus;
     //存放系统内存信息的记录类型。
    computername,username:pchar; 
    //计算机名称、用户名
    spc,bps,nofc,tnoc:longint;
     //用于存放磁盘容量的变量
    myreg:Tregistry; 
     //用于访问注册表的TRegistry变量begin
      memo1.Lines.Clear;  for ch:='A' to 'Z' do begin
        i:=getdrivetype(pchar(ch+':\'));
        buffer:='  '+ch+': ';
        case i of
          DRIVE_UNKNOWN : buffer:=buffer+'未知类型';
          DRIVE_REMOVABLE: buffer:=buffer+'软盘';
          DRIVE_FIXED : begin
               buffer:=buffer+'硬盘';
               if getdiskfreespace(pchar(ch+':\'),
                  spc,bps,nofc,tnoc) then begin
                  buffer:=buffer+'总容量: 
                  '+inttostr((spc*bps*tnoc) div (1024*1024))+'MB';
                  buffer:=buffer+'剩余: 
                  '+inttostr((spc*bps*nofc) div (1024*1024))+'MB';
               end;
             end;
          DRIVE_REMOTE : buffer:=buffer+'网络驱动器';
          DRIVE_CDROM :buffer:=buffer+'CD-ROM驱动器';
          DRIVE_RAMDISK:buffer:=buffer+'RAM虚拟驱动器';
        end;
        if (ch >'D') and (i=1) then break;
        if i<>1 then memo1.Lines.Add(buffer);
      end;  case getkeyboardtype(0) of  //获取键盘类型
        1: buffer:='  键盘: IBM PC/XT或兼容类型(83键)';
        2: buffer:='  键盘: Olivetti "ICO"(102键)';
        3: buffer:='  键盘: IBM PC/AT(84键)';
        4: buffer:='  键盘: IBM增强型(101或102键)';
        5: buffer:='  键盘: Nokia 1050';
        6: buffer:='  键盘: Nokia 9140';
        7: buffer:='  键盘: Japanese';
      end;
      memo1.lines.add(buffer);  //获取键盘功能键数目
      memo1.lines.add(' 功能键数目:
      '+inttostr(getkeyboardtype(2)));  memo1.Lines.add('显示器分辨率:
       '+inttostr(getsystemmetrics(SM_CXSCREEN))
       +'x'+inttostr(getsystemmetrics(SM_CYSCREEN)));
      //获取鼠标按键数目
      memo1.Lines.add(' 鼠标: 
      '+inttostr(getsystemmetrics(SM_CMOUSEBUTTONS))+'键');  globalmemorystatus(meminfo); //获取系统内存数量
      memo1.lines.add('   物理内存:
      '+inttostr(meminfo.dwTotalPhys div 1024)+' KB');  i:=getsystemmetrics(SM_CLEANBOOT);
      case i of
        0:buffer:='系统启动模式:正常模式';
        1:buffer:='系统启动模式:保护模式';
        2:buffer:='系统启动模式:网络保护模式';
      end;
      memo1.lines.add(buffer);  x:=getsystemmetrics(SM_ARRANGE); 
      //获取系统最小化窗口的起始位置和排列方式
      y:=x;
      x:=x and 3;
      y:=y and 12;
      case x of
        ARW_BOTTOMLEFT :  buffer:=' 最小化窗口:自左下角';
        ARW_BOTTOMRIGHT : buffer:=' 最小化窗口:自右下角';
        ARW_TOPLEFT :  buffer:=' 最小化窗口:自左上角';
        ARW_TOPRIGHT : buffer:=' 最小化窗口:自右上角';
      end;
      case y of
        ARW_LEFT : buffer:=buffer+'横向排列';
        ARW_UP :   buffer:=buffer+'纵向排列';
        ARW_HIDE : buffer:=buffer+'隐藏';
      end;
      memo1.lines.add(buffer);  getmem(computername,255);  //获取计算机名称和用户名
      getmem(username,255);
      i:=255;
      getcomputername(computername,i);
      memo1.lines.add(' 计算机名称: '+computername);
      getusername(username,i);
      memo1.lines.add(' 用户名: '+username);
      freemem(computername);
      freemem(username);  getsysteminfo(cpuinfo);  //获取CPU类型
      case cpuinfo.dwProcessorType of
         386 : buffer:='  CPU类型: 386';
         486 : buffer:='  CPU类型: 486';
         586 : buffer:='  CPU类型: Pentium';
      end;
      memo1.Lines.add(buffer);  //从注册表中获取CPU标识,Windows版本,
     产品标识,注册单位名称及用户名
      myreg:=Tregistry.Create;
      myreg.RootKey:=HKEY_LOCAL_MACHINE;
      if myreg.OpenKey('hardware\description  system\centralprocessor\0',false) then
         memo1.lines.add(' CPU标识:
         '+myreg.ReadString('VendorIdentifier'));
      myreg.closekey;
      if myreg.openkey('software\microsoft  windows\currentversion',false) then begin
         memo1.lines.add(' windows版本: 
         '+myreg.ReadString('Version'));
         memo1.lines.add(' 版本号:
         '+myreg.ReadString('VersionNumber')+'
         '+myreg.ReadString('Subversionnumber'));
         memo1.lines.add(' 产品标识: 
         '+myreg.Readstring('ProductID'));
         memo1.lines.add('注册单位名称:
         '+myreg.readstring('RegisteredOrganization'));
         memo1.lines.add(' 注册用户名:
         '+myreg.readstring('RegisteredOwner'));
      end;
      myreg.CloseKey;
      myreg.Free;
    end;
    end.
      

  6.   

    sager,人家到VC版来就是要看你念DELPHI经吗?
      

  7.   

    Elephant:人家想要的是在注册表中相关主键的数据,我手边只有这一份Delphi程序的资料,但关于注册表的内容应该完全一样的,你又何必如此挑剔呢?何况在某些情况下,编程语言都是相通的!!