我为COM电影注册了一个自动播放事件处理程序。
我正在使用C#,并遵循CodeProject的指南:http://www.codeproject.com/KB/system/AutoplayDemo.aspx
当插入DVD电影时,我在列表中看到我的处理程序,它确实触发了(我在代码中添加了Debugger.Break(),所以我可以调试它)
在我的对象中,我实现了IDropTarget接口,并调用了我的Drop事件。
但是对于DVD电影,我无法询问传入的IDataObject。使用“Autoplay Enumerated IDList Array”格式调用IDataObject.QueryGetData会返回int值1而不是S_OK(0)。这似乎不是QueryGetData调用的已定义输出值之一,让我完全不知所措。
自动播放事件日志(%SystemRoot%\ Autoplay.log)说:~0x000006E0〜[0312] DVD电影 - >没有内容自动播放!
这是否意味着我无法告知哪个DVD驱动器启动了该事件?当然,大多数系统只有一个,但我仍然想询问正确的设备来获取电影信息!
答案 0 :(得分:2)
我去检查了VLC是如何做到的。不像代码项目示例那样使用COM对象,而是将它们的exe直接映射到注册表操作。
然后他们在动作命令行中使用%1替换参数,这使得Windows自动替换自动播放事件所针对的驱动器。
这是一个更简单的DVD播放解决方案(授予代码项目示例是捕获内容类型检测所检查的所有文件,因此它不完全符合我的需要)