谁能提供获取CMOS中数据(包括显示器型号和序列号)的程序代码. 取CMOS里的数据倒是非常容易。不过似乎你所需要的数据应该不在CMOS里吧。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 取CMOS里的数据倒是非常容易。就通过0x70,0x71端口操作就可以了。不过似乎你所需要的数据不在CMOS里吧。 西西,你们也太朴实了吧!读地址?为什麽不读WIN 的注册表呢? 请问syz,能不能给出包含具体信息的注册表的主键. 见PNP规范吧.MS有公开的方法获取PNP设备的信息.如果你要的设备不是PNP的,JUST FORGET ABOUT IT. 转贴一份: 在开发应用程序时,增加一项显示计算机系统信息的功能,例如已安装的软盘、硬盘、光驱、网络驱动器,硬盘的容量和剩余空间,显示器分辨率、键盘类型、鼠标的键数,内存大小、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) thenmemo1.lines.add(' 注册用户名: '+myreg.readstring('RegisteredOwner')); myreg.closekey;---- 以上仅举几例,获取其他一些信息的方法与此类似,详见源程序。 ---- 本程序在Pwin95、Delphi3下调试通过。 ---- 附:源程序清单。 unit Unit1;interfaceuses 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. sager,人家到VC版来就是要看你念DELPHI经吗? Elephant:人家想要的是在注册表中相关主键的数据,我手边只有这一份Delphi程序的资料,但关于注册表的内容应该完全一样的,你又何必如此挑剔呢?何况在某些情况下,编程语言都是相通的!! 很简单的数组问题(送分了) 如何用API播放mp3,不使用控件能播放mp3吗? 在vb里怎么样才能删掉最近打开过文件的记录?? 关于加密算法? 数据库事务的问题,谢谢你了…… 如何获得当前上网方式的名称???? 权限小问题 2-Dropdown List类型的组合框如何赋初值? 怎么网格控件中数据导出到Excel 请问如何制作控件. 为什么在菜单中加入位图后,位图居中,标题文字就不显示? 图形放大
不过似乎你所需要的数据不在CMOS里吧。
如果你要的设备不是PNP的,JUST FORGET ABOUT IT.
//必须在程序单元的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.