怎样获得光驱信息!(40分)

  • 主题发起人 主题发起人 kasee
  • 开始时间 开始时间
K

kasee

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样才能获得光驱的名称!主要指比如是:‘40X CDROM’或者其它,也就是
获取能在‘设备管理器 - CDROM ’下看到的信息!
我试过住册表,不容易看出来,主要是虚拟光驱在打开和关闭时住册表并不改
变,改变的是它的子键。
各位有什么好方法呀!
 
几个基本的例子,由此可演化得到许多硬件信息。
结果放在Memo1中。
procedure TForm1.Button1Click(Sender: TObject);
var
systeminfo: SYSTEM_INFO;
memory: MEMORYSTATUS;
sector,byte,cluster,free: DWORD;
freespace,totalspace: longint;
CDtype: UINT;
name: CHAR;
drvname: string;
volname,filesysname: PCHAR;
sno,maxl,fileflag: DWORD;
begin
Memo1.Lines.Clear();
//获得CPU型号
GetSystemInfo(systeminfo);
Memo1.Lines.Add('您的CPU类型是:' + inttostr(systeminfo.dwProcessorType));

//获得内存状态
memory.dwLength := sizeof(memory); //初始化
GlobalMemoryStatus(memory);
Memo1.Lines.Add('您的物理内存是(' + inttostr(integer(memory.dwTotalPhys div 1024 div 1024)) + 'MB)。');
Memo1.Lines.Add('其中可用内存是(' + inttostr(integer(memory.dwTotalPhys div 1024)) + 'KB)。');

//获得C盘可用空间
GetDiskFreeSpace('C:', LPDWORD(@sector)^, LPDWORD(@byte)^, LPDWORD(@free)^, LPDWORD(@cluster)^); //获得返回参数
totalspace := cluster * byte * sector div 1024 div 1024; //计算总容量
freespace := free * byte * sector div 1024 div 1024; //计算可用空间
Memo1.Lines.Add('C盘总空间(' + inttostr(integer(totalspace)) + 'MB)。');
Memo1.Lines.Add('C盘可用空间(' + inttostr(integer(freespace)) + 'MB)。');

//检测CD-ROM,是否有光盘
GetMem(volname, 255);
GetMem(filesysname, 100);
for name :='C' to 'Z' do//循环检测A~Z
begin
drvname := name + ':';
CDtype := GetDriveType(PCHAR(@drvname[1])); //获得磁盘类型
if (CDtype = DRIVE_CDROM) then
begin
Memo1.Lines.Add('您的光驱盘符为[' + drvname + ']');
volname^ := Chr(0);
filesysname^ := Chr(0);
if ( not (GetVolumeInformation(PCHAR(@drvname[1]), volname, 250, LPDWORD(@sno), LPDWORD(@maxl)^, LPDWORD(@fileflag)^, filesysname,100))) then
Memo1.Lines.Add(drvname + '驱中没有发现光盘') //如果返回值为假
else //如果返回值为真
begin
Memo1.Lines.Add (drvname + '驱中光盘卷标为: [' + String(volname) + ']');
Memo1.Lines.Add (drvname + '驱中光盘序号为: [' + inttostr(sno) + ']');
end;
end;
end;
FreeMem(volname);
FreeMem(filesysname)
end;
 
我要的是光驱名称!唉!
 
没人会吗!说说看嘛!
 
不会吧!大侠在那里呢!
 
盘符还是卷标?,人家可都说了(mlzhou),

饭做好了,还要喂吗?
 
不是盘符,也不是卷标而是光驱的型号!在‘设备管理器 - CDROM ’下看到的信息!
 
api:getdrivertype(lpctstr lprootpathname)
 
真巧,我也正想知道!
我试了很多API都不行,就差直接读注册表了,总觉得还应该
有别的方法,因为一些实现了这个功能的软件,例如:NERO DRIVESPEED等,
似乎没有发现它们是读注册表实现的(我监视过)!

密切关注!请高手指点一下吧!
 
我也想知道!!!!
 
唉!问了5千年!都没结果,不知道那优化大师怎么搞出来的!
 
应该是用API :Getdevicecaps吧!返回设备性能!
至于用法,我也没用过,看看帮助吧!
int getdevicecaps(hdc hdc,//设备内容句柄
int nindex)//查询信息索引,
其中nindex有个直可以是DRIVERVERSION,是直设备的版本型号,具体如下:
index       Meaning
DRIVERVERSION The device driver version.
至于如何获得设备句柄,应该用createfile()参考API帮助,
但是我没弄明白如何从nindex中获得我们想要的东西。
 
我可以获得你所说的光驱型号,这是做光盘加密的副产品。但请原晾,我不提供原码。可以
给你一个windows9x下的演示程序。
如要请给我分。
e-mail:toyzn@godnet.biz
 
这个有什么难度阿
用aspi就可以搞定了
代码我就不写了
不知道的话去google上找找
就有
 
kingqc兄:
能否详细指点一二!
kasee@163.COM
分不多!只有100了!
 
我要收藏先

再谢谢各位~~~~~~~~~~~给我的学习机会

欢迎交友

Nizvoo@etang.com

厚着脸皮type出我的邮箱。。。。
 
kingqc兄:
能否详细指点一二!

 
多人接受答案了。
 
后退
顶部