3

使用しているプレーヤーが DVD プレーヤーか CD プレーヤーかなどを知りたい...

私は試した :

SELECT Drive, MediaType, Caption FROM Win32_CDROMDrive

MediaTypeXP では動作せず、Seven ではうまく動作しません。

私が見つけた MediaType のプレーヤー (Cd Writer/DVD-ROM) が 1 つあるコンピューター (Windows 7 を使用) で試してみましCd Writerた。

2番目の解決策:

「DVD」が見つかったら、「キャプション」で検索します

ソフトウェア ( SIW - Windows のシステム情報) を試し、プレーヤーのプロパティで次のことを行いました。

機能 :

CD リーダー : CD ROM、CD R、CD RW

CDライター:CD R、CD RW

DVDリーダー:DVD ROM、DVD R、DVD RW、DVD RAM

DVD ライター : いいえ

スマートサポート : いいえ

だから、私は知りたいです: WMI クエリ (または他のソリューション、私は C++ を使用) を使用して、同じ情報を取得できますか?

できたら最高です!できない場合は、「文字列の解析」を続けます。

4

1 に答える 1

5

ドライブが DVD であるか CDROM であるかを判断するには、DeviceIoControl関数をIOCTL_STORAGE_GET_MEDIA_TYPES_EX制御コードと共に使用し、 GET_MEDIA_TYPES構造体の 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);
}
于 2012-06-26T16:30:15.223 に答える