Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DVD还是CD播放器?_C++_Hardware_Detection_Wmi Query_Optical Drive - Fatal编程技术网

C++ DVD还是CD播放器?

C++ DVD还是CD播放器?,c++,hardware,detection,wmi-query,optical-drive,C++,Hardware,Detection,Wmi Query,Optical Drive,我想知道我的播放机是DVD还是CD播放机等 我试过: SELECT Drive, MediaType, Caption FROM Win32_CDROMDrive MediaType在XP上不起作用,在Seven上也不太好 我在一台装有1个播放机(Cd-Writer/DVD-ROM)的电脑(Windows 7)上试用了MediaType,我找到了Cd-Writer 第二种解决方案: 如果我找到“DVD”,我会在“标题”中搜索 我尝试了一个软件,(),在我的播放器属性中: 能力: CD阅读器:C

我想知道我的播放机是DVD还是CD播放机等

我试过:

SELECT Drive, MediaType, Caption FROM Win32_CDROMDrive
MediaType
在XP上不起作用,在Seven上也不太好

我在一台装有1个播放机(Cd-Writer/DVD-ROM)的电脑(Windows 7)上试用了MediaType,我找到了
Cd-Writer

第二种解决方案:

如果我找到“DVD”,我会在“标题”中搜索

我尝试了一个软件,(),在我的播放器属性中:

能力:

CD阅读器:CD-ROM、CD-R、CD-RW

CD刻录机:CD-R、CD-RW

DVD读取器:DVD ROM、DVD R、DVD RW、DVD RAM

DVD刻录机:没有

智能支持:否

所以,我想知道:对于WMI查询(或其他解决方案,我使用C++),我是否可以拥有相同的信息


如果我可以,那就太棒了!如果不能,我只保留我的“字符串解析”。

要确定驱动器是DVD还是CDROM,可以将函数与控制代码一起使用,然后检查结构的DeviceType字段的值

试试这个样品

#include "stdafx.h"
#include <windows.h>
#include <winioctl.h>
#include <stdio.h>
#include <iostream>
using namespace std;

#define wszDrive L"\\\\.\\D:"
int wmain(int argc, wchar_t *argv[])
{
  BOOL bResult;     
  HANDLE hDevice = INVALID_HANDLE_VALUE;  // handle to the drive to be examined 
  hDevice = CreateFileW(wszDrive,          // drive to open
                        GENERIC_READ,             
                        FILE_SHARE_READ | // share mode
                        FILE_SHARE_WRITE, 
                        NULL,             // default security attributes
                        OPEN_EXISTING,    // disposition
                        0,                // file attributes
                        NULL);            // do not copy file attributes

  if (hDevice == INVALID_HANDLE_VALUE)    // cannot open the drive
  {
    return (FALSE);
  }

  UCHAR lpOutBuffer[2048];
  DWORD nOutBufferSize = sizeof(lpOutBuffer);
  ULONG lpBytesReturned;

  bResult = DeviceIoControl(hDevice,                       // device to be queried
                            IOCTL_STORAGE_GET_MEDIA_TYPES_EX, // operation to perform
                            NULL, 0,                       // no input buffer
                            &lpOutBuffer, nOutBufferSize, &lpBytesReturned,
                            NULL);       

  CloseHandle(hDevice);  
  PGET_MEDIA_TYPES pMediaTypes = (PGET_MEDIA_TYPES) lpOutBuffer;
  if (bResult) 
  {
      if (pMediaTypes->DeviceType==FILE_DEVICE_DVD)       
      {
          wprintf(L"DVD\n");
      }
      else
      if (pMediaTypes->DeviceType==FILE_DEVICE_CD_ROM)    
      {
          wprintf(L"CDROM\n");
      }
  } 
  else 
  {
    wprintf (L"Failed. Error %ld.\n", GetLastError ());
  }
  cin.get();
  return ((int)bResult);
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
使用名称空间std;
#定义wszDrive L“\\.\\D:”
int wmain(int argc,wchar_t*argv[])
{
布尔·布雷苏特;
HANDLE hDevice=INVALID\u HANDLE\u VALUE;//要检查的驱动器的句柄
hDevice=CreateFileW(wszDrive,//要打开的驱动器
泛读,
文件_共享|读取|//共享模式
文件共享写入,
NULL,//默认安全属性
打开\u现有,//处置
0,//文件属性
NULL);//不复制文件属性
如果(hDevice==无效的\u句柄\u值)//无法打开驱动器
{
返回(假);
}
UCHAR Lpurbuffer[2048];
DWORD nOutBufferSize=sizeof(低压断路器);
乌隆·勒比特兹返回;
bResult=DeviceIoControl(hDevice,//要查询的设备
IOCTL\u存储\u获取\u媒体\u类型\u EX,//要执行的操作
NULL,0,//没有输入缓冲区
&LPBuffer、nOutBufferSize和lpBytesReturned,
无效);
闭合手柄(hDevice);
PGET_MEDIA_TYPES pMediaTypes=(PGET_MEDIA_TYPES)lpburffer;
if(bResult)
{
如果(pMediaTypes->DeviceType==文件\设备\ DVD)
{
wprintf(L“DVD\n”);
}
其他的
if(pMediaTypes->DeviceType==文件\设备\光盘)
{
wprintf(L“CDROM\n”);
}
} 
其他的
{
wprintf(L“失败。错误%ld。\n”,GetLastError());
}
cin.get();
返回((int)bResult);
}

根据,您必须在Win32_CDROMDrive WMI类的Name或DeviceID属性中检查缩写词
DVD
。是的,我在问题中就是这么说的(
Caption
Name
在我的3台计算机上具有相同的值)我可以使用
名称
/
设备ID
而不是
标题
您是否尝试了设备ID属性?是的,我对
标题
执行相同的操作:我搜索结果中是否有“DVD”。我想知道是否存在其他解决方案,以及我是否可以找到更多信息(如果是作者等…)好的。。。我试过:七(DVD)/七(CD-Writer/DVD)/XP(CD)/XP(DVD)。它能工作!谢谢:)它支持蓝光驱动器吗?