Нужна помощь в написании скрипта? Close

Вы можете задать любой вопрос по программе Autohotkey в нашей группе Вконтакте. Если решение требует более высокой квалификации- можно обратиться непосредственно ко мне.

ВконтактеГруппа Вконтакте Электронная почтаЭлектронная почта Личная страницаСимаков Яков ВК
home icon Все разделы
comunity icon Нужна помощь?

Drive -Autohotkey

Выдвигает/втягивает лоток CD- или DVD-привода, а также задаёт метку диска.

Drive, Sub-command [, Drive , Value]

Параметры Sub-command, Drive и Value зависят друг от друга, их использование описано ниже.

Label, Drive [, NewLabel]: меняет метку диска на указанную в NewLabel (если NewLabel опущен, у диска не будет метки). Drive задаётся как буква диска с двоеточием и необязательной обратной косой чертой (может также работать для UNC-путей и сетевых дисков). Пример: Drive, Label, C:, Seagate200

Чтобы узнать текущую метку, следуйте этому примеру: DriveGet, OutputVar, Label, C:

Lock, Drive: блокирует выдвижение лотка. Например: "Drive, Lock, D:". Большинство приводов не могут быть блокированы, когда они открыты, применение этой команды, вероятно, приведёт к тому, что привод заблокируется, как только он будет закрыт. Эта команда не действует на приводы, которые не поддерживают возможность блокировки (например, большинство только читающих). Если привод заблокирован скриптом и этот скрипт завершается, привод останется блокированным, пока его не разблокирует другой скрипт или другая программа либо до перезагрузки системы. Если указанный привод не существует или не поддерживает блокировку, ErrorLevel будет равен 1. Иначе он устанавливается в 0.

Unlock, Drive: разблокирует лоток. Unlock нужно применять столько же раз, сколько использовалась команда Lock (по крайней мере для некоторых приводов). Например, если "Drive, Lock, D:" выполнялось три раза, то может потребоваться троекратное выполнение "Drive, Unlock, D:". По этой причине и в связи с тем, что не существует способа определить, заблокирован ли в данный момент привод, полезно сохранять эту информацию в переменной.

Eject [, Drive, 1]: выдвигает или втягивает лоток CD- или DVD-привода (для извлечения других типов носителей или устройств смотрите пример с DllCall в конце этой статьи).

Если параметр Drive опущен, используется CD/DVD-привод по умолчанию. Для выдвигания лотка опустите последний параметр. Для втягивания/закрытия задайте его как 1; например, Drive, Eject, D:, 1

Команда Drive Eject ждёт завершения выдвижения или втягивания лотка прежде чем позволить скрипту выполняться дальше. Если лоток уже находится в указанном положении, ErrorLevel устанавливается в 0 (т.е. "нет ошибки").

Drive Eject, вероятно, не будет работать для сетевых дисков или не-CD/DVD-дисков. Если она завершается неудачей по этой или другой причине, ErrorLevel устанавливается в 1.

Предыдущее состояние лотка можно определить, измеряя время, которое занимает выполнение команды. Например, следующая горячая клавиша переводит лоток в противоположное состояние (открыт/закрыт).

#c:: Drive, Eject ; Если команда выполняется быстро, лоток, вероятно, уже был открыт. ; В таком случае, закрываем его: if A_TimeSinceThisHotkey < 1000 ; Поставьте другое время, если нужно. Drive, Eject,, 1 return

Чтобы определить состояние носителя в CD/DVD-приводе (проигрывается, остановлен, открыт и т.п.), смотрите описание команды DriveGet.

ErrorLevel

Равен 1, если были проблемы, иначе 0.

Примечания

Ниже показан альтернативный метод извлечения, который также работает для носителей/устройств, отличающихся от 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 ; Не используется. , UInt, 0) DllCall("CloseHandle", UInt, hVolume) }

Примеры

Drive, Label, D:, BackupDrive Drive, Eject,, 1 ; Втянуть (закрыть) лоток CD/DVD-привода по умолчанию.
Автор перевода: YMP
Настоящее имя переводчика: Юрий Попов
Источник: http://www.script-coding.com/AutoHotkey/Drive.html
Под редакцией ahk-wiki.ru от 21.08.19