Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

А как найти CD-ROM в системе?

1.8K
22 апреля 2003 года
Jeff
94 / / 22.04.2003
Как перечислить список дисков и узнать какой из них является CD-ROM'ом?
1.8K
23 апреля 2003 года
shrize
46 / / 04.12.2002
Цитата:
Originally posted by Jeff
Как перечислить список дисков и узнать какой из них является CD-ROM'ом?


Точно не помню, но посмотри Win32 Api там функция GetVolumeLabel, и должно быть твм же какой тип волума

1.8K
23 апреля 2003 года
Jeff
94 / / 22.04.2003
Цитата:
Originally posted by shrize

Точно не помню, но посмотри 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 ).

1.8K
24 апреля 2003 года
shrize
46 / / 04.12.2002
Сори ты прав на счет GetVolumeLabel, его нет:), есть SetVolumeLabel

GetLogicalDriveStrings - 2 параметра, буфер и длина буфера, записывает в этот буфер название дисков "C:\<null>D:\<null> и т.д."

GetVolumeInformation -поставь в цикле и передавай все эти диски а CD-ROM возвращает файловую систему "DCFS"
1.8K
24 апреля 2003 года
Jeff
94 / / 22.04.2003
Спаибо за помощь, но я уже по-другому разобрался:
if ( GetDriveType( "e:" ) == DRIVE_CDROM )
{
//CD-ROM
}
1.8K
25 апреля 2003 года
shrize
46 / / 04.12.2002
Цитата:
Originally posted by Jeff
Спаибо за помощь, но я уже по-другому разобрался:
if ( GetDriveType( "e:" ) == DRIVE_CDROM )
{
//CD-ROM
}


а если "Е:\" не окажется CDROM-ом то тогда что?

1.8K
25 апреля 2003 года
Jeff
94 / / 22.04.2003
Цитата:
Originally posted by shrize

а если "Е:\" не окажется 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 );

Вот и все.

442
29 апреля 2003 года
HexoGenus
121 / / 20.03.2000
Надеюсь мои коментарии не будут излишними но мне кажется если уж начали возиться с сидюком то вам в скорости могут потребоваться возможности

Как проверить наличие диска в дисководе

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);
// Закрыть лоток
1.8K
29 апреля 2003 года
Jeff
94 / / 22.04.2003
Цитата:
Originally posted by HexoGenus
Надеюсь мои коментарии не будут излишними но мне кажется если уж начали возиться с сидюком то вам в скорости могут потребоваться возможности

Как проверить наличие диска в дисководе

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);
// Закрыть лоток



Спавибо, насчет дверцы привода - это прикольно :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог