Как узнать, для какого DVD-привода предназначено событие AutoPlay?

У меня есть обработчик событий автозапуска, зарегистрированный в COM для DVD-фильмов.

Я использую С# и следую этому руководству от CodeProject: http://www.codeproject.com/KB/system/AutoplayDemo.aspx.

Когда DVD-фильм вставлен, я вижу свой обработчик в списке, и он срабатывает (я добавил Debugger.Break() внутри кода, чтобы я мог его отлаживать)

В моем объекте я реализую интерфейс IDropTarget, и вызывается мое событие Drop.

Однако для DVD-фильмов я не могу опросить переданный IDataObject. Вызов IDataObject.QueryGetData с форматом «Autoplay Enumerated IDList Array» возвращает значение int 1 вместо S_OK (0). Похоже, это не одно из определенных выходных значений для вызова QueryGetData, и я совершенно в растерянности.

В журнале событий автозапуска (%SystemRoot%\Autoplay.log) указано: ~0x000006E0~[0312]DVD Movie -> Автовоспроизведение без содержимого!

Означает ли это, что я не могу узнать, какой DVD-привод запустил событие? Конечно, в большинстве систем будет только один, но я все же хотел бы опросить правильное устройство, чтобы получить информацию о фильме!


person Joon    schedule 16.12.2010    source источник


Ответы (1)


Я пошел и проверил, как это делает VLC. Вместо использования COM-объекта, как в примере с кодовым проектом, они сопоставляют свой exe-файл непосредственно с действием реестра.

Затем они используют параметр подстановки %1 в своей командной строке действия, что заставляет Windows автоматически заменять диск, для которого предназначено событие автозапуска.

Это гораздо более простое решение для воспроизведения DVD (при условии, что пример codeproject состоит в том, чтобы перехватывать все файлы, проверенные с помощью определения типа контента, поэтому он не совсем для той же цели, что мне нужно)

person Joon    schedule 19.12.2010