Как мне узнать, для какого привода DVD происходит событие автозапуска? - PullRequest
2 голосов
/ 17 декабря 2010

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

Я использую C # и следовал этому руководству из 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 -> No Content Autoplay!

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

1 Ответ

2 голосов
/ 19 декабря 2010

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

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

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

...