标题: 如何在关机前自动弹出有光盘的光驱
[打印本页]
作者: zrz444
时间: 2006-8-15 07:24
标题: 如何在关机前自动弹出有光盘的光驱
是这样的:有一个朋友出一个问题.让我做一个批处理.要求是如果光驱里有光盘那个就光不了机器自动弹出,.如果没有光盘在里面可以顺利关机.我对批处理是一窍不 通的.自己乱做做.结果只能关机其他全不对:帮我看一下那儿不对::
@echo off
rundll32/
check cdrom echo.
if exist cdorm=empty
echo 您的光驱没有光盘,可以关机!
shutdown
otherwise
echo 你的光驱里有软盘,系统将自动弹出!
open cdrom
wait 请将光盘拿出,按任意键继续……
shut down
[
Last edited by namejm on 2007-2-3 at 03:59 PM ]
作者: zrz444
时间: 2006-8-15 16:53
不会吧.这么多高手哪儿去了.
作者: zrz444
时间: 2006-8-15 18:42
那么多版主做什么呢.这么冷清清的.......
作者: 3742668
时间: 2006-8-15 23:30
就算是版主也不可能一天24小时在论坛上专门来回贴嘛。
关于你的标题,请参考本版置顶贴进行更改,否则将依惯例进行相应处罚。
给你点提示吧:
@echo off
:start
rem 假设光驱盘符为g盘,下面这句用于判断是否光驱内是否有盘
pushd g: 2>nul || goto shutdown
popd
rem 下面两句用来弹出光驱
echo CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject >%temp%\弹出光驱.vbs
start %temp%\弹出光驱.vbs
pause
goto start
:shutdown
rem 关机部分
shutdown -s -t 00
大致代码就是这么多,细节方面自行更改。
ps:
俗话说:尺有所短,寸有所长;术业有专攻。也许版主在某个方面比大多数人要专上那么一点,但是并不代表其他的网友就都不如版主了,所以对于你的标题个人认为是十分不妥当的,建议参照本版版规自行更改,本次也就不扣积分了。
作者: zrz444
时间: 2006-8-16 08:31
初来乍到规矩不懂,这次前来受益匪浅,以后常来悉心听教...
作者: electronixtar
时间: 2006-8-16 15:20
Quote: |
pushd g: 2>nul || goto shutdown |
|
学习了!
其实弹光驱一句话就够了:
mshta "javascript:new ActiveXObject('WMPlayer.OCX').cdromCollection.Item(0).Eject();window.close();"
那个
cdromCollection.Item(0)
0 就是第一个光驱, 1 就是第二个,类推
[
Last edited by electronixtar on 2006-8-16 at 15:25 ]
作者: NaturalJ0
时间: 2006-8-16 15:46
pushed g: 2>nul
里面的 2 是什么意思?
如果想收光驱回去,应该怎么写?
作者: zrz444
时间: 2006-8-16 20:46
不错...又学习了..
作者: zh159
时间: 2006-8-16 23:44
Quote: |
Originally posted by NaturalJ0 at 2006-8-16 15:46:
pushed g: 2>nul
里面的 2 是什么意思?
如果想收光驱回去,应该怎么写? |
|
2是表示输出错误句柄(执行错误),如果pushd g:执行错误,则“goto shutdown”
如果执行正确,就执行下面弹出光驱的命令
Quote: |
Set wmp = CreateObject("WMPlayer.OCX.7")
Set cdrom = wmp.cdromCollection
cdrom.Item(0).eject
cdrom.Item(0).eject |
|
这段是我刚学会的打开、关闭光驱的VBS脚本;没有后面红色一句为打开光驱,完整的为:光驱关闭时,运行后打开后立即关闭,光驱打开时运行后关闭
PS:其实这两句同等于:“CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject”
但是直接用两句“CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject”却不成功
Quote: |
ON ERROR RESUME NEXT
Set wmp = CreateObject("WMPlayer.OCX.7")
Set cdrom = wmp.cdromCollection
If cdrom.Count >= 1 then '(该句用来判断你的系统中装了多少个光驱)
For z = 0 to cdrom.Count - 1
cdrom.Item(z).eject
Next
For z = 0 to cdrom.Count - 1
cdrom.Item(z).eject
Next
End If |
|
这段是在网上找到的,可以打开、关闭多个光驱,上面的是精简为一个光驱的,红色部分同理
[
Last edited by zxcv on 2006-8-16 at 23:48 ]
作者: IceCrack
时间: 2006-8-17 08:21
难不成论坛上有马甲 一个zrz444 一个zrz000
作者: zrz000
时间: 2006-8-17 08:41
是我同一个人哟。zrz444 注册时设置了安全提问。想上来时忘记了。只能注册了zrz000上来了。555555...
作者: 3742668
时间: 2006-8-17 20:23
请楼主注意更改标题 Quote: |
PS:其实这两句同等于:“CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject”
但是直接用两句“CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject”却不成功 |
|
当然不成功了,两句“CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject”分别创建了两个WMPlayer.OCX.7对象的两个实例,并分别调用了两个实例的eject方法(也就是打开光驱)。实例和对象是两个不同的概念,不应该混淆了。要打开并关驱过3秒后关闭,可以尝试下面的脚本:
With CreateObject("WMPlayer.OCX.7").cdromCollection:.Item(0).eject:WScript.Sleep 3000:.Item(0).eject:End With
另外值得注意的是:在调用vbs脚本以后,最好在批处理中加一句结束wscript.exe进程的代码,调用WMPlayer.OCX.7对象以后wscript.exe进程不会结束(其他对象会自动结束)。如果采用6F的方法的话则需要结束mshta.exe进程。
[
Last edited by 3742668 on 2006-8-17 at 21:50 ]
作者: richercdw
时间: 2006-12-2 09:15
标题: 结束wscript.exe进程的代码
结束wscript.exe进程的代码。这代码怎么写呀。急需
作者: electronixtar
时间: 2006-12-2 09:32
好久没有来看看玩光驱的vbs了,顶一个。以前老是不能解决关闭光驱的问题,现在解决了,谢谢版主。
btw,用 Linux习惯 eject 命令了
作者: lxmxn
时间: 2006-12-2 14:41
Quote: |
Originally posted by richercdw at 2006-12-2 09:15:
结束wscript.exe进程的代码。这代码怎么写呀。急需 |
|
taskkill /im wscript.exe /f
作者: 9527
时间: 2006-12-2 23:50
判断光驱里是否有无光盘也可以用以下方法
例如光驱盘符是G:
if exist G:\nul.ext (echo 有光盘) else (echo 无光盘)
作者: electronixtar
时间: 2006-12-11 01:53
现在可以用高科技的这个命令了:
if exist \\?\CdRom0\* (echo OK) else (echo NO)
CdRom0 是你的第一个光驱,
CdRom1是第二个,类推
作者: HUNRYBECKY
时间: 2006-12-12 00:41
有这么多种方法,使用if exist \\?\CdRom0\* (echo OK) else (echo NO)方法最好,不用判断光区盘符了。
作者: yishanju
时间: 2007-3-19 10:32
Quote: |
Originally posted by electronixtar at 2006-12-11 01:53:
现在可以用高科技的这个命令了:
if exist \\?\CdRom0\* (echo OK) else (echo NO) CdRom0 是你的第一个光驱,
CdRom1是第二个,类推 |
|
:mad: 可恨,这命令现在才看到