我想通过给定一个盘符来判断这个盘是CD盘还是DVD盘。
解决方案 »
- 树状控件的使用
- CString有个成员函数GetBuffer()它的参数是什么意思呢?
- [活动]可用分捐赠,欢迎贫下中农认领!(第六周)
- 做了一个尺子工具,分享给大家
- SendMessage为什么不能发送消息到qq的消息输入框?
- 为什么用同样的方式,将同一个.h文件,添加到不同的工程里,有的编译时,会出现#include ".h"文件出错呢?
- 关于FD_READ事件
- 使用ExitWindowsEx(),如何知道当前的Win2k系统是否支持Power off 功能
- 怎么样得到网页中的flash文件名
- 请问一下:现在程序员的工资有多少RMB,参与都有分
- 真金白银500元寻求高手解决DsoFramer控件中的一个问题
- vc++ 操作excel文件方法
bool is_dvd_drive(tstring drive_letter)
{
// IOCTL_STORAGE_GET_MEDIA_TYPES_EX可能返回不止一条DEVICE_MEDIA_INFO,故定义足够的空间
#define MEDIA_INFO_SIZE sizeof(GET_MEDIA_TYPES)+15*sizeof(DEVICE_MEDIA_INFO)
HANDLE hDevice; // 设备句柄
BOOL bResult; // DeviceIoControl的返回结果
GET_MEDIA_TYPES *pmt; // 内部用的输出缓冲区
DWORD dwOutBytes; // 输出数据长度 // 打开设备
hDevice = ::CreateFile(drive_letter.c_str(), // 文件名
0, // 不需要读盘
FILE_SHARE_READ, // 共享方式
NULL, // 默认的安全描述符
OPEN_EXISTING, // 创建方式
0, // 不需设置文件属性
NULL); // 不需参照模板文件 if (hDevice == INVALID_HANDLE_VALUE)
{
return false;
} pmt = (GET_MEDIA_TYPES *)new BYTE[MEDIA_INFO_SIZE]; bResult = DeviceIoControl(hDevice, // 设备句柄
IOCTL_STORAGE_GET_MEDIA_TYPES_EX, // 取介质类型参数
NULL, 0, // 不需要输入数据
pmt, MEDIA_INFO_SIZE, // 输出数据缓冲区
&dwOutBytes, // 输出数据长度
NULL); // 用同步I/O if (bResult != 0)
{
if (pmt->DeviceType == FILE_DEVICE_DVD)
{
delete pmt;
CloseHandle(hDevice);
return true;
}
} delete pmt;
// 关闭设备句柄
CloseHandle(hDevice); return false;
}
要是大侠有更简单的方法请告诉小弟,不胜感激啊,谢谢先。