我一直没有成功地找到任何可靠的方法来检测CD/DVD刻录过程何时开始。 刻录工具将只是文件资源管理器。
我知道有一个事件日志"IMAPI CD 刻录 COM 服务已成功发送启动控件。
这样做的问题是,即使从未发生过刻录,也会触发此操作(以及相应的停止)。 似乎某些事情(如WMP)会在您初始化时触发该事件(单击刻录选项卡)。
我需要的是一种方法(wmi,imapi等),只要刻录过程实际开始,它就会通知我。
不幸的是,我不知道足够的powershell,甚至不知道从哪里开始寻找。 此时,我只是在黑暗中疯狂地谷歌搜索,希望有人做了一些足够接近我想要的事情,但还没有找到任何东西。
谢谢
您可以监视写入操作的状态,但只能在您自己的应用程序中: 监视事件进度
多个接口允许您实现要接收的事件处理程序 进度信息。例如,可以将事件对象附加到 用于接收写入操作状态的数据编写器。
但是,没有预刻录操作:
没有钩子或回调来预处理正在刻录的数据 别人
我唯一能想到的监视IMAPI系统范围的是挂钩DLL调用:
- 挂钩 COM 接口方法
是否可以使用 MadChook 挂接 COM 接口方法?实际上 我想做的是挂接IMAPI接口(IDiscMaster) 写光盘。我想为该接口挂上方法 RecordNow。 现在这个接口是通过 imapi 实现的.exe资源管理器会执行 使用代理"Actxprxy.dll对此门托德进行进程外调用
我已经通过挂钩共同创建实例并包装来解决这个问题 IDiscMaster的所有方法,但后来我最终得到了很多 不必要的命中我的钩子,因为资源管理器调用共同创建实例很多 次。
- 如何在 Vista 中挂上实时 CD 刻录?
我正在编写一个简单的程序来监视Windows中的CD刻录 资源管理器。我钩上了 IDiscMaster::RecordDisc in XP 和 IDiscFormat2Data::Write,它工作正常。但是如果我像现场一样刻录 CD 文件系统,它不受监控。
- 我应该挂接哪个函数?
- 我钩上了ICDBurn::Burn(这个函数与ICDBurn的vft有0x10偏移量)。每当我弹出菜单点击时, 资源管理器失败,Windows将其关闭。错误代码为 STATUS_STACK_BUFFER_OVERRUN。
但这很容易出错,需要一些特定的技能。
感谢您的帮助。 自从询问以来,我发现至少在Windows 7中,但可能在其他版本的Windows中,在写入之前对CD驱动器进行了排他性锁定。 这在 MSFT 上的 IMAPI 参考 dox 中进行了讨论。 这实际上是由几乎每个刻录应用程序完成的,而不仅仅是文件资源管理器,以防止多个事情弄乱写入过程。
通过cdrom 将 ID 代码为 133 的事件发送到系统,可以监视该事件以检测何时开始刻录。 此事件似乎仅在刻录开始时生成,而不是由 OP 中讨论的其他事情生成。
以下代码片段将附加一个事件侦听器,当事件显示时,它将做出反应。
我不太了解Powershell或Windows,所以如果有人有建议使这个例子更好,我欢迎建议这似乎是功能性的。
$WMI = @{
Query = "select * from __InstanceCreationEvent
where TargetInstance isa 'Win32_NtLogEvent'
and TargetInstance.logfile = 'System'
and TargetInstance.SourceName = 'cdrom'
and TargetInstance.EventCode = '133'"
Action = {
write-host "CD Burn started"
}
}
$Null = Register-WMIEvent @WMI