中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 03:36
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]仍未解决……再问光驱状态如何确定(VBS) 查看 575 回复 4
楼 主 [求助]仍未解决……再问光驱状态如何确定(VBS) 发表于 2009-08-07 00:07 ·  中国 广东 中山 电信
初级用户
积分 102
发帖 47
注册 2008-11-10 08:29
17年会员
UID 130514
性别 男
状态 离线
请问各位高人
如何以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文档里都没有提,应该去哪里查看相关资料?
2 发表于 2009-08-07 00:36 ·  中国 广东 中山 电信
初级用户
积分 102
发帖 47
注册 2008-11-10 08:29
17年会员
UID 130514
性别 男
状态 离线
如果有相应的event也行,比如WMI的event query,不过暂未查到相关资料
3 发表于 2009-08-07 02:46 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
事件?

打开和关闭是状态。。。所以查不到。




貌似WMI和VBS都没有直接实现的参考。

3方倒是有。。。
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
4 发表于 2009-08-07 05:57 ·  中国 广东 中山 电信
初级用户
积分 102
发帖 47
注册 2008-11-10 08:29
17年会员
UID 130514
性别 男
状态 离线
事件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,窃以为……这个……很神奇
5 发表于 2009-08-07 06:31 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
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……
但是,如果门是关闭状态,会先开再关。
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
论坛跳转: