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);
}