DVD или CD-плеер?

Я хочу знать, является ли мой плеер проигрывателем DVD или CD и т. Д.

Я старался:

SELECT Drive, MediaType, Caption FROM Win32_CDROMDrive

MediaType не работает на XP, и не очень хорошо на Seven.

Я попробовал на компьютере (с Windows 7) с 1 проигрывателем (CD Writer/DVD-ROM) в MediaType я нашел Cd Writer,

Второе решение:

Я ищу в "Подпись", если я нахожу "DVD"

Я пробовал программное обеспечение ( SIW - Информация о системе для Windows) и в свойствах своего проигрывателя:

Возможности:

CD Reader: CD ROM, CD R, CD RW

CD Writer: CD R, CD RW

DVD Reader: DVD ROM, DVD R, DVD RW, DVD RAM

DVD Writer: Нет

SMART Поддержка: нет

Итак, я хочу знать: с запросом WMI (или другим решением, я использую C++), могу ли я иметь ту же информацию или нет?

Было бы здорово, если бы я мог! Если я не могу, я просто продолжаю свой "анализ строки".

1 ответ

Решение

Чтобы определить, является ли дисковод DVD или CDROM, вы можете использовать функцию DeviceIoControl с управляющим кодом IOCTL_STORAGE_GET_MEDIA_TYPES_EX, а затем проверить значение поля DeviceType структуры GET_MEDIA_TYPES.

Попробуйте этот образец

#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);
}
Другие вопросы по тегам