标题: [求助]仍未解决……再问光驱状态如何确定(VBS)
[打印本页]
作者: azziporah
时间: 2009-8-7 00:07
标题: [求助]仍未解决……再问光驱状态如何确定(VBS)
请问各位高人
如何以VBS确定光驱是否弹出
小弟之前也看过不少帖子了,还是没有找到好的解决办法
大多数的办法只能判断光驱是否可用(也就是其中有无光盘)
如 objDrive.IsReady 之类
这样将会把光驱弹出与光驱中无盘视为同样的状态
另外,像下面这段代码
Set wmp = CreateObject("WMPlayer.OCX.7")
Set cdrom = wmp.cdromCollection
cdrom.Item(0).eject
cdrom.Item(0).eject
其中的cdrom.Item(*)是否还支持其它属性或方法?
问得更远一点,像"WMPlayer.OCX.7"这样的对象,VBS和WSH文档里都没有提,应该去哪里查看相关资料?
作者: azziporah
时间: 2009-8-7 00:36
如果有相应的event也行,比如WMI的event query,不过暂未查到相关资料
作者: slore
时间: 2009-8-7 02:46
事件?
打开和关闭是状态。。。所以查不到。
貌似WMI和VBS都没有直接实现的参考。
3方倒是有。。。
作者: azziporah
时间: 2009-8-7 05:57
事件a2b
状态a ————————> 状态b
事件b2a
状态a <———————— 状态b
我的意思是查询事件a2b或b2a,如上图所示
刚刚翻了一些资料,似乎可以用__instanceModificationEvent来抓Win32_CDROMDrive
我试了一下,还是不能区分弹出状态和无盘状态
另外,原来PrimalScript里面有COM Objects、WMI Classes、.NET Framework的资料,比较全,但没有说明文字,不过已经足够让人看明白cdrom.Item(0).eject这种写法的由来了
可惜根据资料显示,只有eject方法,没有insert………… 至于为什么调用两次eject就成了insert,窃以为……这个……很神奇
作者: slore
时间: 2009-8-7 06:31
cdromCollection
Function Item(ByVal lIndex As Long) As IWMPCdrom
Returns the CDROM object at the given index
返回一个 IWMPCdrom对象
它有2个属性
Property driveSpecifier As String
Returns the CDROM drive specifier
Property Playlist As IWMPPlaylist
Returns the playlist of tracks currently in the CDROM drive
一个过程:
Sub eject
Eject the CD in the CDROM drive
翻译的话是弹出。
如果你的光驱是关闭的话,执行一次eject就会弹出。
如果你的光驱是打开的话,执行一次eject不会弹出。
执行2次操作:
如果门是打开状态,第一次执行弹出不变,第二次关闭光驱门。
如果门是关闭状态,第一次打开门,即弹出,第二次执行关闭门。
所以执行2次一定是insert……
但是,如果门是关闭状态,会先开再关。