API-функция GetDriveType выдает одинаковый код как для настоящего CD-ROM накопителя, так и для виртуального (например, FastCD). Как их все-таки различить?
Есть идея. Попробовать его программно открыть и реагировать на ошибку. Но во-первых, если сидюк реальный, то корретка выедет, и ее нужно будет снова закрыть, чему юзер не особо возрадуется. Только представь себя на его месте, вставил ты сидюк, а он тебе его назад выплюнул....гхм, извини - отвлекся. А во-вторых, возможность определения того или иного сидюка один к черти скольким....
не факт то что получиться программно отличить ошибку выброса
реального и виртуального сидюка... думаю есть смысл поробовать определить наличие виртуального устойства благо их не так много (правда как это реализовать я не в курсе)...
А мне понравилось предложение User Unknown, только я предложил бы не открывать его, а проверить на запись. На виртуальный CD ROM можно записать файл, а на обычный - нет.
С записью не покатит! А если это резак? А если в нем болванка CD-R? Ты ж её завалишь! Вытащить то можно попробовать... вот только где гарантия, что эмулятор это не обработает корректно. Я точно знаю, что VirtualDrive на этом тесте себя выдаст, а вот Virtual CD - нет! Он даже дрова для себя ставит... как тут? Помоему это тупик!
Ну, я наверно некомпитентен в этих делах. Просто я еще не видел резака, который пишет без спец.софта (хотя мне тут подсказывают, что такие появились)и мой виртуальный CD позволяет записывать все что угодно. Пусть будет по вашему.
Ему явно надо, чтобы прогазапускалась только, или работала толькос сидюком. Вот он и спрашивает, как ему это реализовать. писать сидюк может, если на компе, например установлен PocketCD. Он позволяет просто, даже в эксплорере кидать файло как на обычный хард драйв. Ладно, все это лирика. Вот ещё один вариант. Надо попробовать перебрать параметры реального привода и болванки, если что то звякнет, значит привод виртуальный. А посмотреть можно: скорость вращения привода, свойство болванки, а именно том (volume). (Как это реализовать пока не знаю, но теоретически это возможно, пусть и не средствами VB)
С эмуляторами уже давно идет священная война. Но всегда появляются все более и более реалистичные эмуляторы, которые, я думаю в скором будущем будут делать вид, что они ещё и греются, и периодически сбиваются, и даже лампочкой мигают. Здесь нужен другой подход. Нужно защищаться по-другому.
Дискуссия набирает обороты. Честно говоря, я и не думал, что моя проблема привлечет такой интерес и вызовет живое обсуждение. Но поскольку вопросов ко мне много, попытаюсь уточнить свою проблему - отвечу на вопрос "а нафига тебе?". Но прежде - Славик, извини, у меня и в мыслях не было тебя обидеть. Я сам не ахти какой дока, поэтому ежели выражаю что-то слишком категорично - то это не со зла.
Итак, я хочу в списке устройств сделать выделенным именно реальный CD Drive, так как по логике работы программы именно он является наиболее вероятным выбором. Это выделение не обязательно, так - маленький сервис, юзер его и не заметит. Просто возник вопрос и у меня не было ответа. Вот я и выставил его. Так что сейчас интерес к нему больше теоретический.
Что касается выброса CD - с одной стороны это действительно неприемлемо уже потому, что реальный сидюк при этом выедет, и пользователю это, мягко говоря, наслаждения не доставит. С другой стороны, я не уверен, что виртуальный выдаст ошибку. По крайней мере, эксплорер в контекстном меню виртуального диска показывает команду "Извлечь" и реагирует на нее адекватно - то есть никак .
Пробовать написать что-то? Вопрос здесь даже не в том, начнет ли резак что-то писать по этой команде, а в том, что и реальный, и виртуальный отреагируют одинаково - выдадут ошибку. Говоря о виртуальном - я имею в виду FastCD personal edition. И даже если есть какие-то другие эмуляторы, позволяющие писать, использовать этот способ все равно нельзя. Кстати, если писать, то что?
Мне очень понравились идеи Unknown User-a. Мне кажется метка тома врядли что-то даст, а вот если бы скорость замерить, да если она будет существенно различаться - это может быть выход. Только вот как это сделать? Кто знает - напишите!