CyberForum.ru - Форум программистов и сисадминов
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум программистов > Форум C++ > Форум C++ Builder

Ответ Создать новую тему
 
Старый 30.01.2012, 22:17   #1
Артин
Новичок
 
Регистрация: 27.06.2008
Сообщений: 29
Репутация: 1 (1)
По умолчанию Проверка наличия CD привода

В "SYSTEM\\CurrentControlSet\\Services\\Cdrom\\Enum" храниться информация только о том, какие CD приводы подключались к компьютеру.
Функция mciSendString("capability cdaudio can play wait", NULL, 0, F->Handle)
всё время выдаёт один и тот же результат, вне зависимости от того, подключён ли CD-ROM.

Каким образом можно программно проверить работоспособность CD привода, или хотя бы подключён он в данный момент, либо нет?
Артин вне форума
Другие темы раздела
Создание приложений для контроллеров Siemens C++ Builder
Подскажите пожалуйста, книги/примеры/ссылки, где хорошо описывается разработка прикладных приложений для контроллеров Siemens. Заранее, благодарен. Создание приложений для контроллеров Siemens
C++ Builder TTrayIcon - OnBalloonClick
Приветствую. TTrayIcon имеет лишь одно событие связанное с Balloon - OnBalloonClick Что если реакция на ЛКМ должна быть отличной от ПКМ? Допустим как в IM-messager'ах: ЛКМ открывает окно с сообщением, ПКМ - просто закрывает Balloon Какие мысли? Добавлено через 20 минут Или все-таки.... TTrayIcon - OnBalloonClick
Старый 31.01.2012, 04:47   #2
samsebe
Новичок
 
Регистрация: 25.01.2010
Сообщений: 39
Репутация: 14 (14)
По умолчанию Re: Проверка наличия CD привода

Код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
int cold = 0; 
 TStringList * cdDiskList = new TStringList; 
  int t; 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int BufferSize = GetLogicalDriveStrings(0, NULL);
char *Buffer = new char[BufferSize];
TStringList * DiskList = new TStringList;
 
GetLogicalDriveStrings(BufferSize, Buffer);
 
 
int DiskCount = (BufferSize - 1) / 4;
cold = DiskCount;
 
for(int i = 0; i < DiskCount; i++)
    {
    char DiskString[4];
    CopyMemory(DiskString, (Buffer + i * 4), 4);
    DiskList->Add(DiskString);
    AnsiString DiskName = DiskList->Strings[i];
    //Memo1->Lines->Add(DiskName);
    int DriveType = GetDriveType(DiskName.c_str());
 
       if(DriveType == DRIVE_CDROM)
        {
        Memo1->Lines->Add("есть");
        cdDiskList->Add(DiskList->Strings[i]+"\\");
        }
    }
delete [] Buffer;
delete DiskList;
t = cdDiskList->Count;
}
этот код определяет, есть ли в системе CD - ROMы, тут есть лишние строки, но думаю разберетесь...

литература: C++ Builder Книга рецептов , С++Builder-FAQ
samsebe вне форума
Старый 31.01.2012, 15:23  [ТС]   #3
Артин
Новичок
 
Регистрация: 27.06.2008
Сообщений: 29
Репутация: 1 (1)
По умолчанию Re: Проверка наличия CD привода

Спасибо конечно, но данный код определяет, какие из локальных дисков являются CD приводами, в том числе и виртуальными.
Артин вне форума
Старый 31.01.2012, 15:32   #4
mimicria
return (true);
 
Аватар для mimicria
 
Регистрация: 19.04.2011
Адрес: Орёл
Сообщений: 1,470
Репутация: 1249 (679)
По умолчанию Re: Проверка наличия CD привода

Цитата Сообщение от Артин Посмотреть сообщение
данный код определяет, какие из локальных дисков являются CD приводами
А это разве не ответ на вопрос, подключен ли в системе CD-ROM?
Что вы понимаете под проверкой работоспособности?
mimicria вне форума
Старый 31.01.2012, 16:05   #5
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 23.09.2011
Сообщений: 796
Репутация: 502 (379)
По умолчанию Re: Проверка наличия CD привода

- а почему бы не использовать другую функцию_
Код C++
1
mciSendString("Set cdaudio door open test", NULL, 0, NULL)
Она практически ничего не делает (test),служит для определения возможности выполнения команды, но возвращает какое-то значение (можно анализировать).
nick42 вне форума
Старый 01.02.2012, 18:39  [ТС]   #6
Артин
Новичок
 
Регистрация: 27.06.2008
Сообщений: 29
Репутация: 1 (1)
По умолчанию Re: Проверка наличия CD привода

Цитата Сообщение от nick42 Посмотреть сообщение
- а почему бы не использовать другую функцию_
Код C++
1
mciSendString("Set cdaudio door open test", NULL, 0, NULL)
Она практически ничего не делает (test),служит для определения возможности выполнения команды, но возвращает какое-то значение (можно анализировать).
Она тоже возвращает одно и тоже, вне зависимости от того, подключены ли шины к CD-ROM.

А это разве не ответ на вопрос, подключен ли в системе CD-ROM?
Что вы понимаете под проверкой работоспособности?
Если из системного блока вытащить сидюшник, то результат будет всё равно тем же самым.
Артин вне форума
Старый 01.02.2012, 19:36   #7
mimicria
return (true);
 
Аватар для mimicria
 
Регистрация: 19.04.2011
Адрес: Орёл
Сообщений: 1,470
Репутация: 1249 (679)
По умолчанию Re: Проверка наличия CD привода

Цитата Сообщение от Артин Посмотреть сообщение
Если из системного блока вытащить сидюшник, то результат будет всё равно тем же самым.
Вот не надо врать. Если CD-ROM отключен, то GetLogicalDriveStrings его не найдёт.
mimicria вне форума
Старый 01.02.2012, 21:37   #8
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 23.09.2011
Сообщений: 796
Репутация: 502 (379)
По умолчанию Re: Проверка наличия CD привода

Цитата Сообщение от Артин Посмотреть сообщение
Она тоже возвращает одно и тоже, вне зависимости от того, подключены ли шины к CD-ROM.... Если из системного блока вытащить сидюшник, то результат будет всё равно тем же самым.
Если б эта проблема была моей, я б побрыкался и таки чего-нибудь придумал. Например, если вместо первого NULL в параметрах задать указатель на массив UCHAR[10], то туда записываются 10 байтов состояния; последние несколько байтов различны для случаев, когда дверка открыта и когда закрыта. Думаю, что и в случае отсутствия привода в составе компа ответ этой функции был бы содержательным.
nick42 вне форума
Старый 02.02.2012, 04:57   #9
samsebe
Новичок
 
Регистрация: 25.01.2010
Сообщений: 39
Репутация: 14 (14)
По умолчанию Re: Проверка наличия CD привода

Артин, я так и не понял, какую задачу вы себе ставите - проверить работоспособность любого CD-ROMа в системе или какогото определенного
samsebe вне форума
После регистрации реклама в сообщениях будет скрыта
Старый 03.02.2012, 18:11  [ТС]   #10
Артин
Новичок
 
Регистрация: 27.06.2008
Сообщений: 29
Репутация: 1 (1)
По умолчанию Re: Проверка наличия CD привода

Цитата Сообщение от mimicria Посмотреть сообщение
Вот не надо врать. Если CD-ROM отключен, то GetLogicalDriveStrings его не найдёт.
Извиняюсь. Как оказалось на рабочем компе CD привод мёртвый и система его вообще не видит. А я смотрел на три виртуальных CD привода, и думал, что один из них настоящий.


Например, если вместо первого NULL в параметрах задать указатель на массив UCHAR[10], то туда записываются 10 байтов состояния;
У меня возвращает либо ничего, либо мусор какой-то.

Так, пол дела решено. Теперь следующий вопросы: Как отсеять все виртуальные приводы?
Я могу только предположить, что в алфавитном порядке сначала идут реальные приводы, а затем виртуальные.
Артин вне форума
Ответ Создать новую тему

Похожие темы
Тема Автор
Visual Basic .NET Проверка наличия папки на FTP
Всем доброго времени суток. У меня есть проблема с определением папок на FTP сервере. Задача заключается в том, что нужно проверить существует ли папка на FTP, если существует, то ее нужно удалить. Заранее спасибо.
Sinord
VBA Проверка наличия листа
Нужно проверить наличие листа в форме. В случае, если лист есть, переходим на него. Если нет, то создаем, копируем на него таблицу и опять таки переходим. Мой код: Private Sub CommandButton2_Click() Set num_sheet = ThisWorkbook.Worksheets If num_sheet Is Nothing Then Sheets.Add...
darkkkrush
PHP для начинающих Проверка наличия файла
Как проверить наличие файла на PHP?
zago-vlad
PHP для начинающих Проверка наличия переменной
Здраствуйте. Есть такой вопрос как мне решить проблему. Если в сесии пользователь есть то ему выдавлась кнопка добовления статьи. а если он не зашол то в место кнопки ему выдаёться сообщение. Вот что у мня получилось: <? if (!isset($_SESSION)) {echo "Вы не можете сохранить свою идею....
PadvonE
C# .NET Проверка наличия .NetFramework
Здравствуйте. Подскажите как проверить, установлен ли .NetFramework. В основном рекомендуют читать соответствующие ключи реестра, но для этого нужно использовать WinAPI. Как прочитать соответствующий ключ используя только WinAPI? Может есть какие либо более корректные способы проверки?
nikitasnv777
Опции темы

Текущее время: 00:35. Часовой пояс GMT +4.

Компьютерный форум программистов и сисадминов
Powered by vBulletin® Version 3.8.7 PL2
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Рейтинг@Mail.ru Яндекс.Метрика