如何找出自动播放事件适用于哪个 DVD 驱动器?
我有一个向 COM 注册的 DVD 电影自动播放事件处理程序。
我正在使用 C#,并遵循 CodeProject 中的指南:http://www.codeproject.com/KB/system/AutoplayDemo.aspx
当插入 DVD 电影时,我在列表中看到我的处理程序,并且它确实触发了(我添加了调试器.Break() 在代码中,以便我可以对其进行调试)
在我的对象中,我实现了 IDropTarget 接口,并且调用了我的 Drop 事件。
但是,对于 DVD 电影,我无法询问传入的 IDataObject。使用“自动播放枚举 IDList 数组”格式调用 IDataObject.QueryGetData 将返回 int 值 1,而不是 S_OK (0)。这似乎不是 QueryGetData 调用的定义输出值之一,让我完全不知所措。
自动播放事件日志(%SystemRoot%\Autoplay.log)显示:~0x000006E0~[0312]DVD Movie ->没有内容自动播放!
这是否意味着我无法获知哪个 DVD 驱动器启动了该事件?当然,大多数系统只有一个,但我仍然想询问正确的设备来获取电影信息!
I have an autoplay event handler registered with COM for DVD movies.
I am using C#, and followed this guide from CodeProject:http://www.codeproject.com/KB/system/AutoplayDemo.aspx
When a DVD movie is inserted I see my handler in the list and it does fire (I added Debugger.Break() inside the code so I could debug it)
In my object, I implement the IDropTarget interface, and my Drop event gets called.
However for DVD movies I cannot interrogate the IDataObject passed in. A call to IDataObject.QueryGetData with the "Autoplay Enumerated IDList Array" format returns the int value 1 instead of S_OK (0). This does not seem to be one of the defined output values for the QueryGetData call and has me totally at a loss.
The autoplay event log (%SystemRoot%\Autoplay.log) says: ~0x000006E0~[0312]DVD Movie -> No Content Autoplay!
Does this mean that I can't get told which DVD drive started the event? Granted most systems will only have one, but I would still like to interrogate the correct device to get the movie info!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我去检查了 VLC 是如何做到的。他们没有像 codeproject 示例那样使用 COM 对象,而是将其 exe 直接映射到注册表操作。
然后,他们在操作命令行中使用 %1 替换参数,这使得 Windows 自动替换自动播放事件所在的驱动器。
这是一个更简单的 DVD 播放解决方案(假定 codeproject 示例是捕获内容类型检测检查的所有文件,因此它与我所需的目的并不完全相同)
I went and checked how VLC does it. Instead of using a COM Object as the codeproject example does, they map their exe directly to the registry action.
Then they use the %1 substitution parameter in their action command line, which makes Windows automatically substitute in the drive that the autoplay event is for.
This is a much simpler solution for DVD playback (granted the codeproject example is to catch all files examined by the content type detection, so it is not exactly for the same purpose as I needed)