用VC++控制多光驱

对于初学者,编写CD播放器不妨为一种入门的捷径。CD播放器的核心在于MCI命令,而在各种媒体上介绍MCI命令如何使用的文章比比皆是,因此我暂且对其略过不谈。在这儿,我着重向大家介绍一个比较重要的技术--多光驱的支持。

人们的机器上的光驱往往不止一个,有普通的CDROM、有CDR、有DVD,还有穷人使用的虚拟光驱:)。这样一来,对于编写多媒体软件的程序员就出了个难题:如何能在软件中加入多光驱的支持。要解决这个问题,首先要学会两个API函数,其目的是获得目标电脑的光驱数。

GetLogicalDrives()

该函数功能是返回一个代表当前变量磁盘驱动器的位掩码;

该函数原型为:DWORD GetLogicalDrives(VOID);

该函数如果调用成功,返回值为一个代表当前变量磁盘驱动器的位屏蔽掩码,位的位置0为驱动器A,1为驱动器B,2为驱动器C等。如果函数调用失败,返回值为0。

举例:如果某台电脑上驱动器为A、C、D、E,则函数调用成功后的返回值是00011101,其中最低位代表驱动器A,由A存在所以该位掩码为1,而由于B不存在,所以倒数第二位掩码为0。

GetDriveType()

该函数功能是获得一个磁盘驱动器的类型;

该函数原型为:UINT GetDriveType(LPCTSTR lpRootPathName);

参数lpRootPathName:指向一个以NULL结束的指定要返回有关信息的磁盘根目录的字符串指针。如果该参数为NULL,则函数用当前根目录。

返回值:返回值返回指定驱动器的类型,它是下列值中的一个:

DRIVE_UNKNOWN 不能决定驱动器类型
DRIVE_NO_ROOT_DIR 不存在根目录
DRIVE_REMOVABLE 磁盘能从驱动器中删除
DRIVE_FIXED 磁盘不能从驱动器中删除
DRIVE_REMOTE 驱动器是一个远程(网络)驱动器
DRIVE_CDROM 驱动器是一个CDROM驱动器
DRIVE_RAMDISK 驱动器是一个RAM磁盘

举例:判断F盘是否为光驱

UINT IsCDRom;
LPCTSTR Drive;
Drive="F:\\";
IsCDRom=GetDriveType(Drive);
if (IsCDRom==DRIVE_CDROM) printf("F盘是光驱");
else printf("F盘不是光驱");

以上是两个API函数的介绍,通过这两个函数的组合,我们就可以获得光驱数。

下面简单的给出源程序:

DWORD DriveTemp; LPCTSTR DriveItem;
unsigned short DriveNum=0,itemp;
UINT IsLogicalCDROM;
int CDS=0; //光驱数
DriveTemp=GetLogicalDrives(); //获得磁盘驱动器位掩码
while(DriveTemp)` //获得驱动器数目
{
  DriveTemp>>=1;
DriveNum++;
};
for(itemp=4; itemp<=DriveNum;itemp++)
{
switch(itemp)
  {
case 4:
     DriveItem="D:\\";
    break;
case 5:
    DriveItem="E:\\";
    break;
case 6:
    DriveItem="F:\\";
     break;
case 7:
    DriveItem="G:\\";
    break;
         ...
case 26:
    DriveItem="Z:\\";
  }
  IsLogicalCDROM=GetDriveType(DriveItem);
  if (IsLogicalCDROM==DRIVE_CDROM) //获得光驱数目
  {
     CDName[CDS]=DriveItem;
     CDS++;
  }
}

时间: 2024-10-30 04:32:26

用VC++控制多光驱的相关文章

VC实现自动监测光驱状态的改变

Windows系统通过GDI(图形设备接口)将系统的硬件和用户可以操作的编程接口相分离,以保证系统的稳定型和安全性.当某一个设备的硬件配置发生变化时,Windows发送广播消息WM_DEVICECHANGE给相关的应用和设备驱动程序,此时在应用程序中可以截获该消息并分析其中的消息参数,先分辨当前的消息内容,然后调用不同的事件处理程序.本文中主要考虑的是光驱的弹出和送入事件,因此程序设计时只需对逻辑驱动器进行扫描,判断是哪个驱动器号发生变化即可.一般的外设(包括软.硬盘驱动器.光驱等)在Windo

用Delphi实现对光驱盘盒的开关控制(一)

摘要 介绍在Delphi编程环境下实现开启光驱盘盒的主要技术和方法,该程序以托盘方式驻留状态栏中,可以设置为随系统启动而启动,不但能够控制一个光驱,而且还能动态检测某台电脑上的光驱数目,创建相应的控制菜单,实现有选择性控制光驱. 关键词 Delphi程序 光驱控制 弹出菜单 过程 事件 引言 通常,我们打开和关闭光驱是通过按动光驱上开关按钮来实现的,但有时候手动方式显得很不方便,尤其是在一台电脑上安装多个光驱的情形下,同时光驱的损耗在手动方式下也是最大的,Delphi是个功能强大且容易的编程工具

光驱故障排除实例5则

在经常使用光驱之后,光驱就会不可避免地发生一些故障,对这些故障进行仔细琢磨后,我们或许不难发现有一部分故障并不是由光驱自身质量引起的,而是我们的操作不当或软件设置错误引起的,由这些因素引起的光驱故障通常被归类为光驱"软故障".要想排除这类特殊的"软故障",我们只有针对性地从软件设置出发,给光驱营造一个合适的"软"环境,确保光驱常用常新! 排除光驱图标错乱故障 近日在一台安装有Windows 98操作系统的计算机中使用光驱安装程序时,偶然看到光驱的

VC/MFC 编程技巧大总结

 1 toolbar默认位图左上角那个点的颜色是透明色,不喜欢的话可以自己改. 2 VC++中 WM_QUERYENDSESSION WM_ENDSESSION 为系统关机消息. 3 Java学习书推荐:<java编程思想> 4 在VC下执行DOS命令 a. system("md c:\\12"); b. WinExec("Cmd.exe /C md c:\\12", SW_HIDE); c. ShellExecute ShellExecute(NULL

AnyDVD &amp;amp; AnyDVD HD v6.1.3.3 Final 多国语言版 下载_常用工具

AnyDVD是一种自动在后台解密DVD电影的驱动程序.这样一来,对於所有的应用程序和WINDOWS操作系统,这张DVD就变成没有加密保护与全区码了.AnyDVD HD具备与AnyDVD相同的功能,但是带来了额外的完全支持HD-DVD(高清晰度DVD)的功能,包括解密HD-DVD影碟. AnyDVD AnyDVD是一种自动在后台解密DVD电影的驱动程序.这样一来,对於所有的应用程序和WINDOWS操作系统,这张DVD就变成没有加密保护与全区码了.借助于AnyDVD,市面上的拷贝工具,诸如Clone

押宝海辉六年修正果 英特尔投资谈IT业机遇

"我们做了六年的长期战略投资者,如今海辉终于在美国上市了."英特尔投资中国区董事总经理许盛渊日前在接受上海证券报专访时兴奋地感叹. 许盛渊所说的海辉软件,于6月30日正式登陆美国 纳斯达克,融资逾7400万美元.所发行的存托股份(ADS)发行价为10美元,每份ADS代表19股普通股. 有意思的是,该公司60%股权为多家VC控制.这在国内资本市场颇为罕见. 海辉软件(国际)集团公司是成立于1996年的国内一家资格较老的信息技术软件及业务流程外包服务提供商,其主要业务包括企业应用服务,企业

英特尔投资畅谈IT业机遇:押宝海辉六年终修正果

⊙记者 叶勇 ○编辑 全泽源 "我们做了六年的长期战略投资者,如今海辉终于在美国上市了."英特尔投资中国区董事总经理许盛渊日前在接受上海证券报专访时兴奋地感叹. 许盛渊所说的海辉软件,于6月30日正式登陆美国 纳斯达克,融资逾7400万美元.所发行的存托股份(ADS)发行价为10美元,每份ADS代表19股普通股. 有意思的是,该公司60%股权为多家VC控制.这在国内资本市场颇为罕见. 海辉软件(国际)集团公司是成立于1996年的国内一家资格较老的信息技术软件及业务流程外包服务提供商,其

红孩子投资人的变现希望只能寄托于将公司全盘出售

曾经宣称要实现IPO的母婴电商企业红孩子,近日被传正在四处寻求被并购的机会.正在洽谈的对象,与近年来在电商行业异军突起的苏宁易购有关. 7月30日,一位不愿意透露姓名的业内人士向<IT时代周刊>爆料称,苏宁易购收购红孩子一事有了新的进展."苏宁易购的财务人员已经进驻红孩子近一个月,双方的合作正处于审计核算阶段,一旦核算出具体报价,应该就会正式对外公布." "目前还没有确切信息,以上市公司披露的信息为准."对于并购传言,苏宁易购市场管理中心常务副总监闵涓清

用Delphi实现对光驱盘盒的开关控制(三)

5)程序自动执行无效的菜单鼠标事件 procedure TForm1.mNotautorunClick(Sender: TObject);var Reg: TRegistry;begin Reg:=TRegistry.Create; try Reg.RootKey:=HKEY_LOCAL_MACHINE; if (Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',False))=True then begin // 在注册表中