Drive

CD 또는 DVD 드라이브의 트레이를 꺼내고 넣습니다. 또는 드라이브의 볼륨 라벨을 설정합니다.

Drive, SubCommand , Value1, Value2

SubCommand, Value1 그리고 Value2 매개변수는 서로 의존적입니다. 그리고 그 사용법은 아래에 기술합니다.

부-명령어

For SubCommand, specify one of the following:

Label

Changes the volume label of the specified drive.

Drive, Label, Drive , NewLabel

Drive는 드라이브 기호 다음에 쌍점과 선택적으로 역사선이 따라옵니다 (UNC와 맵핑된 드라이브에서도 작동). NewLabel을 생략하면, 드라이브는 라벨이 없습니다.

To retrieve the current label, use the DriveGet's Label sub-command, such as DriveGet, OutputVar, Label, C:.

Lock

Prevents the eject feature of the specified drive from working.

Drive, Lock, Drive

Drive는 드라이브 기호 다음에 쌍점과 선택적으로 역사선이 따라옵니다 (UNC와 맵핑된 드라이브에서도 작동).

대부분의 드라이브는 "열어둔 채로 잠글 수" 없습니다. 그렇지만, 열려 있는 동안에 드라이브를 잠그면 아마도 그 결과는 닫히는 순간 잠기게 될 것입니다.

이 부-명령어는 잠금을 지원하지 않는 드라이브에는 아무 효과가 없습니다 (대부분의 읽기-전용 드라이브).

To unlock a drive, use the Unlock sub-command below. 드라이브가 스크립트에 의해 잠기고 그리고 그 스크립트가 끝나버리면, 그 드라이브는 또 다른 스크립트나 프로그램이 풀어줄 때까지 또는 시스템이 재시작할 때까지 그대로 잠겨 있습니다.

If the specified drive does not exist or does not support the locking feature, ErrorLevel is set to 1. 그렇지 않으면 0이 설정됩니다.

Unlock

Restores the eject feature of the specified drive.

Drive, Unlock, Drive

Drive는 드라이브 기호 다음에 쌍점과 선택적으로 역사선이 따라옵니다 (UNC와 맵핑된 드라이브에서도 작동).

This sub-command needs to be executed multiple times if the drive was locked multiple times (at least for some drives). For example, if Drive, Lock, D: was executed three times, three executions of Drive, Unlock, D: might be needed to unlock it. Because of this and the fact that there is no way to determine whether a drive is currently locked, it is often useful to keep track of its lock-state in a variable.

Eject

CD 또는 DVD 드라이브의 트레이를 꺼내고 넣습니다.

Drive, Eject , Drive, 1

다른 미디어 또는 장치의 유형을 꺼내려면, 이 페이지 하단의 DllCall 예제를 #3 참조하십시오.

Drive is the drive letter followed by a colon and an optional backslash. Drive 생략되면, 기본 값은 CD/DVD 드라이브가 사용됩니다. 트레이를 꺼내려면, 마지막 매개변수를 생략합니다. 트레이를 닫으려면 1을 마지막 매개변수에 지정합니다; 예를 들어: Drive, Eject, D:, 1.

이 부-명령어 스크립트를 계속 진행하기 전에 꺼내기가 완료되기를 기다립니다. 트레이가 이미 올바른 상태에 있다면 (열려 있거나 또는 닫혀 있거나), ErrorLevel은 0이 설정됩니다 (즉, "에러 없음").

이 부-명령어 네트워크 드라이브나 CD/DVD 드라이브가 아니면 작동하지 않습니다. 실패하면, ErrorLevel에 1이 설정됩니다.

이전의 트레이 상태를 탐지하는 것도 가능합니다. 부-명령어가 완료에 소비되는 시간을 측정해 보면 압니다. 예를 들어, 다음 핫키는 트레이가 반대 상태가 되도록 토글합니다:

#c::
Drive, Eject
; 명령어가 빨리 완료되었다면, 트레이는 아마도 이미 꺼내져 있을 것입니다.
; 그 경우 다시 넣습니다:
if (A_TimeSinceThisHotkey < 1000)  ; 필요하면 이 시간을 조절합니다.
    Drive, Eject,, 1
return

CD나 DVD 드라이브의 미디어의 상태를 결정하려면 (연주, 정지, 열림, 등등), DriveGet을 참조하십시오.

에러 처리

[v1.1.04+]: 이 명령어는 실패하면 예외를 던질 수 있습니다. 더 자세한 정보는 실행시간 에러를 참조하십시오.

ErrorLevel은 문제가 있으면 1, 그렇지 않으면 0이 설정됩니다.

DriveGet, DriveSpaceFree

예제

Changes the volume label of the D drive.

Drive, Label, D:, BackupDrive

기본 CD 또는 DVD 드라이브의 트레이를 닫습니다(넣습니다).

Drive, Eject,, 1

다음은 또다른 꺼내기 방법입니다. CD/DVD 말고도 다른 유형의 미디어/장치에도 작동합니다. 원하는 드라이브 기호에 일치시키려면 아래의 첫 줄을 갱신하십시오 (그 아래 다른 줄은 모두 무시해도 좋습니다).

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)
}