驱动器


弹出/收回 CD 或 DVD 驱动器的托盘,或者设定驱动器的卷标。

Drive, Sub-command [, Drive , Value]

如下所述,sub-command、drive,和参数value之间相互依赖。

Label, Drive [, NewLabel]: 将 Drive (驱动器)的卷标改为 NewLabel (如果省略 NewLabel,驱动器卷标为空)。Drive 是字母后跟一个冒号和可选的反斜杠(可能是UNCs和驱动器映射)。例如:Drive, Label, C:, Seagate200

按照以下例子,取得当前驱动器的卷标:DriveGet, OutputVar, Label, C:


Lock, Drive
: 锁定驱动器,防止其正在工作的时候被弹出。例如:"Drive, Lock, D:"。大多数的驱动器不能 "locked open"(锁定之后被打开)。然而,在驱动器打开时锁定它,将会使驱动器在关闭后进入锁定状态。对于不支持锁定的驱动器(像大多数的仅读驱动器),此命令将不起作用。该命令同样不支持 Windows 95/98/Me 下非 IDE 驱动器。如果脚本在结束前锁定了某个驱动器,则该驱动器将一直保持锁定状态,直到其它的脚本或程序将其解锁,或系统重启。如果指定的驱动器不存在或者不支持锁定特性,ErrorLevel (警告级别)将被设为1,否则为0。


Unlock, Drive: 功能同上述命令相反。在 Window NT/2000/XP 及以后版本,如果驱动器锁定了多次,则需要多次执行 Unlock 命令。例如,如果 "Drive, Lock, D:" 执行了三次,需要执行三次 "Drive, Unlock, D:" 来解锁。事实上,因为不能确定驱动器是否处于锁定状态,因此,经常需要一个变量来记录锁定的状态。


Eject [, Drive, 1]
: 弹出或收回 CD 或 DVD 驱动器的托盘(弹出其它类型的影音设备或驱动器,请参见本页结尾使用的 DllCall )。

如果省略 Drive ,则使用默认的 CD / DVD 驱动器。省略最后一个参数将则弹出托盘,将其设为 1 则该命令收回或关闭托盘。例如:Drive, Eject, D:, 1

Drive Eject 命令在托盘弹出或收回完成后返回。如果托盘成功到达指定状态(打开或关闭),ErrorLevel 将被设为0(就是"没有错误")。

对于网络驱动器或者非 CD / DVD 驱动器,Drive Eject 命令很可能无法正常工作。因为这些或其它原因导致的错误,ErrorLevel 将被设为1。

通过检测执行命令所花费的时间,可以有效地确定托盘以前的状态。例如:下面的热键将触发托盘到相反状态(打开或关闭):

#c::
Drive, Eject
; 如果很短时间内完成了这条命令,托盘很可能已经弹出了。
; 那样的话,收回托盘。
if A_TimeSinceThisHotkey < 1000  ; 调整到合适的时间。
    Drive, Eject,, 1
return

如果想测定 CD 或 DVD 的影音播放状态(比如正在播放,暂停,打开等),请参见 DriveGet 命令。

ErrorLevel

出现错误时,ErrorLevel 将被设为1,否则为0。

注意

下面的例子对弹出方法进行了改动,使之不仅能用于 CD 或 DVD 驱动器,还能用于media/devices(影音设备):

; 根据需要更新第二行的驱动器标号(不用考虑其它行)。
Driveletter = I:  ; 设定为你想弹出的驱动器的标号。

hVolume := DllCall("CreateFile"
    , Str, "\\.\" . Driveletter
    , UInt, 0x80000000 | 0x40000000  ; GENERIC_READ | GENERIC_WRITE
    , UInt, 0x1 | 0x2  ; FILE_SHARE_READ | FILE_SHARE_WRITE
    , UInt, 0
    , UInt, 0x3  ; OPEN_EXISTING
    , UInt, 0, UInt, 0)
if hVolume <> -1
{
    DllCall("DeviceIoControl"
        , UInt, hVolume
        , UInt, 0x2D4808   ; IOCTL_STORAGE_EJECT_MEDIA
        , UInt, 0, UInt, 0, UInt, 0, UInt, 0
        , UIntP, dwBytesReturned  ; Unused.
        , UInt, 0)
    DllCall("CloseHandle", UInt, hVolume)
}

相关命令

DriveGet, DriveSpaceFree

示例

Drive, Label, D:, BackupDrive
Drive, Eject,, 1 ; 收回(关闭)默认 CD 或 DVD 驱动器的托盘。