А как найти CD-ROM в системе?
Как перечислить список дисков и узнать какой из них является CD-ROM'ом?
Точно не помню, но посмотри Win32 Api там функция GetVolumeLabel, и должно быть твм же какой тип волума
Точно не помню, но посмотри Win32 Api там функция GetVolumeLabel, и должно быть твм же какой тип волума
GetVolumeLabel такого вообще нет ( в MSDN ), есть GetVolumeInformation(), только вот с ним грабли какие-то у меня. Пишем:
int drive, curdrive;
/* Save current drive. */
curdrive = _getdrive();
char chRootPathName[3]; // root directory
LPTSTR lpVolumeNameBuffer; // volume name buffer
DWORD nVolumeNameSize; // length of name buffer
LPDWORD lpVolumeSerialNumber; // volume serial number
LPDWORD lpMaximumComponentLength; // maximum file name length
LPDWORD lpFileSystemFlags; // file system options
LPTSTR lpFileSystemNameBuffer; // file system name buffer
DWORD nFileSystemNameSize; // length of file system name buffer
//перебираем диски
for( drive = 3; drive <= 26; drive++ )
{
sprintf( chRootPathName , "%c:\\", drive + 'A' - 1 );
if ( GetVolumeInformation( chRootPathName,
lpVolumeNameBuffer,
nVolumeNameSize,
lpVolumeSerialNumber,
lpMaximumComponentLength,
lpFileSystemFlags,
lpFileSystemNameBuffer,
nFileSystemNameSize ) )
{
//do something
}
else
{
DWORD err = GetLastError();
}
}
Проблема в том, что GetVolumeInformation возвращает FALSE, а по коду ошибки не хватает памяти ( Not enough storage is available to process this command ).
GetLogicalDriveStrings - 2 параметра, буфер и длина буфера, записывает в этот буфер название дисков "C:\<null>D:\<null> и т.д."
GetVolumeInformation -поставь в цикле и передавай все эти диски а CD-ROM возвращает файловую систему "DCFS"
if ( GetDriveType( "e:" ) == DRIVE_CDROM )
{
//CD-ROM
}
Спаибо за помощь, но я уже по-другому разобрался:
if ( GetDriveType( "e:" ) == DRIVE_CDROM )
{
//CD-ROM
}
а если "Е:\" не окажется CDROM-ом то тогда что?
а если "Е:\" не окажется CDROM-ом то тогда что?
Да тебе надо просто перебрать все буковки дисков. А делается это так (полный код для поиска CDROM):
int drive, curdrive;
static char path[_MAX_PATH];
char driveName[3];
/* Save current drive. */
curdrive = _getdrive();
/* If we can switch to the drive, it exists. */
for( drive = 1; drive <= 26; drive++ )
{
sprintf( driveName, "%c:", drive + 'A' - 1 );
if( _getdcwd( drive, path, _MAX_PATH ) != NULL )
{
if ( GetDriveType( driveName ) == DRIVE_CDROM )
{
//найден
}
}
}
/* Restore original drive.*/
_chdrive( curdrive );
Вот и все.
Как проверить наличие диска в дисководе
if(GetVolumeInformation("A:\\", 0, 0, 0, 0, 0, 0, 0))
ShowMessage( "Диск есть" );
else
ShowMessage( "Диска нет" );
То же работет если задать букву сидюка...
и еще может пригодится:
#include "MMsystem.h"
mciSendString("Set cdaudio Door Open Wait", NULL, 0, Application->Handle);
// Открыть лоток
mciSendString("Set cdaudio door closed wait", NULL, 0, Application->Handle);
// Закрыть лоток
Надеюсь мои коментарии не будут излишними но мне кажется если уж начали возиться с сидюком то вам в скорости могут потребоваться возможности
Как проверить наличие диска в дисководе
if(GetVolumeInformation("A:\\", 0, 0, 0, 0, 0, 0, 0))
ShowMessage( "Диск есть" );
else
ShowMessage( "Диска нет" );
То же работет если задать букву сидюка...
и еще может пригодится:
#include "MMsystem.h"
mciSendString("Set cdaudio Door Open Wait", NULL, 0, Application->Handle);
// Открыть лоток
mciSendString("Set cdaudio door closed wait", NULL, 0, Application->Handle);
// Закрыть лоток
Спавибо, насчет дверцы привода - это прикольно :)