2

我有一个向 COM 注册的用于 DVD 电影的自动播放事件处理程序。

我正在使用 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 驱动器启动了该事件?当然大多数系统只有一个,但我仍然想询问正确的设备以获取电影信息!

4

1 回答 1

2

我去检查了 VLC 是如何做到的。他们没有像 codeproject 示例那样使用 COM 对象,而是将其 exe 直接映射到注册表操作。

然后他们在他们的操作命令行中使用 %1 替换参数,这使得 Windows 自动替换自动播放事件所针对的驱动器。

这是一个更简单的 DVD 播放解决方案(假设 codeproject 示例是捕获由内容类型检测检查的所有文件,因此它与我需要的目的不完全相同)

于 2010-12-19T20:07:48.167 回答