如何用编程获取CD-ROM的驱动器盘符?
来源:互联网 发布:域名重定向怎么设置 编辑:程序博客网 时间:2024/05/16 19:00
首先,一台机器可能有不止一个CD-ROM驱动器。现在CD-ROM已经是PC机的标准配置,此外再装个可擦写的光盘驱动,甚至是DVD都是很常见的事情。不管一台机器上装多少个不同的驱动器,如何找到它们呢?
有关驱动器的函数有GetLogicalDrives,GetLogicalDriveStrings和GetDriveType。前两个用来获取逻辑驱动器盘符,GetLogicalDriveStrings返回路径名字符串,如:
"A:/ <null>C:/<null> F:/<null><null> "
有关驱动器的函数有GetLogicalDrives,GetLogicalDriveStrings和GetDriveType。前两个用来获取逻辑驱动器盘符,GetLogicalDriveStrings返回路径名字符串,如:
"A:/
这里每一个路径名都由NULL(空或者零)字符分隔,最后结尾是两个空字符--这是标准的C风格处理方法。对于喜欢操作位和字节的汇编语言使用者来说,GetLogicalDrives是个很好用的API函数。它以位掩码的形式返回逻辑驱动器。即在一个DWORD类型的返回值中,位0(最小的一位)表示驱动器A,位1表示驱动器B,以此类推。每一个位的状态如果是on,则表示对应的逻辑驱动器存在;否则状态为off,表示对应的逻辑驱动器不存在。大家知道DWORD是一个32位的值,足以包括所有的英文字母,也就是说最多可有26个盘符。
为了确定某个逻辑驱动器的类型,必须调用GetDriveType函数。它以路径名作为参数(如C:/),返回DRIVE_FIXED,DRIVE_REMOVABLE,或DRIVE_UNKNOWN。下面列出了所有可能返回的值:这些值在winbase.h定义
#define DRIVE_UNKNOWN 0 // 无效路径名#define DRIVE_NO_ROOT_DIR 1 // 无效路经,如无法找到的卷标#define DRIVE_REMOVABLE 2 // 可移动驱动器(如磁盘驱动器,光驱等)#define DRIVE_FIXED 3 // 固定的驱动器 (如 通常的硬盘)#define DRIVE_REMOTE 4 // 网络驱动器#define DRIVE_CDROM 5 // CD-ROM#define DRIVE_RAMDISK 6 // 随机存取(RAM) 磁盘为了更容易说明问题,我写了一个小程序--ListDrives,它可以列出某台机器上所有的逻辑驱动器。其实现代码如下:
ListDrives.cpp #include "stdafx.h"#include "resource.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifusing namespace std; // for string class// 下面是一个GetDriveType返回码与人可读字符串的迷你对照表//struct { UINT type; // GetDriveType返回码类型 LPCSTR name; // ascii 名称} DriveTypeFlags [] = { { DRIVE_UNKNOWN, "未知" }, { DRIVE_NO_ROOT_DIR, "无效路经" }, { DRIVE_REMOVABLE, "可移动" }, { DRIVE_FIXED, "固定" }, { DRIVE_REMOTE, "网络驱动器" }, { DRIVE_CDROM, "CD-ROM" }, { DRIVE_RAMDISK, "随机存取磁盘" }, { 0, NULL},};int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){ if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { cerr << _T("Fatal Error: MFC initialization failed") << endl; return -1; } // 获取逻辑驱动器字符串- a:/b:/c:/... 等. // 还可以用GetLogicalDrives 以位图形式代替字符串形式获取信息 TCHAR buf[100]; DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf); // 显示每个驱动器的信息 // string msg = "Logical Drives:/n"; // STL string for (TCHAR* s=buf; *s; s+=_tcslen(s)+1) { LPCTSTR sDrivePath = s; msg += sDrivePath; msg += " "; // GetDriveType 获取枚举值,如DRIVE_UNKNOWN等. // UINT uDriveType = GetDriveType(sDrivePath);// 查找驱动器类型。在此我用了表(结构数组)来进行查找处理,过于繁琐了一些,// 但既然uDriveType 的值是连续的。// 我可以用DriveTypeFlags[uDriveType]来代替线性查找。在实际的编程中通常可以这么做:// if (uDriveType & DEVICE_CDROM) { ……// } // for (int i=0; DriveTypeFlags[i].name; i++) { if (uDriveType == DriveTypeFlags[i].type) { msg += DriveTypeFlags[i].name; break; } } msg += ''''''''''''''''/n''''''''''''''''; } cout << msg.c_str(); return 0;}程序代码很简单,它是一个MFC程序。用GetLogicalDriveStrings获取所有逻辑驱动器的根路径名,然后调用GetDriveType来确定每个驱动器的类型。如果你要找CD-ROM,则检查uDriveType = DRIVE_CDROM就可以了
- 如何用编程获取CD-ROM的驱动器盘符?
- 如何确定CD-ROM驱动器的盘符?
- 关于得到CD-ROM的盘符的问题
- 请将标为Service Pack 2 CD-ROM的光盘插入CD-ROM驱动器(D:),然后单击确定。如何解决? 在windows server 2003服务器上。
- cd-rom无法读盘的原因
- 如何用VC建立映射网络驱动器?
- 用C++编程获取驱动器盘符(一)
- 用C++编程获取驱动器盘符(二)
- C#获取驱动器盘符
- HP CD-ROM/DVD ROM的使用
- 如何用javascript获取select的值
- 如何用.NET获取BO的token
- 如何用 DELPHI 获取 CPU 的序列号
- 如何用jquery获取文本框的值
- CD驱动器的打开与关闭
- 如何用JSP编程
- CD-ROM
- 如何用自己的方法实现修改盘符
- SQL SERVER中top的问题?
- 浅谈DOTNET大规模团队开发控制与asp.net中webform的viewstate
- MySQL Bot
- 学会一招
- 找到当前所有逻辑驱动器的根驱动器路径
- 如何用编程获取CD-ROM的驱动器盘符?
- vc中treeview显示磁盘目录和文件代码
- 搜 索 计 算 机 中 所 有 驱 动 器
- 自 编 删 除 目 录 及 其 下 属 文 件 的 函 数
- 应用进程实现对其他应用程序的调用
- 系统再次崩溃,又要重装,苦不堪言
- 持续动力
- [收藏]J2EE初学者需要理解的五个问题
- 程序集的版本控制[上]