Как закрыть лоток для оптических дисков в Windows?

7

Я всегда удивлялся, почему в Windows есть опция « Извлечь», но в контекстном меню оптических дисководов нет соответствующей опции « Закрыть / Закрыть лоток» .

Есть ли способ закрыть лоток оптического привода без использования стороннего программного обеспечения в Windows?

Реза М.
источник
1
Вы хотели эту опцию в случае, если у вас есть удаленный доступ к компьютеру?
Кристофер Чиппс
4
@ChristopherChipps Собирается ли он также положить диск в лоток удаленно?
cutrightjm
1
Прикоснись @ekaj. Конечно, серьезно в том случае, если пользователю нужен открытый лоток, и он не может сделать это самостоятельно. В этом случае это необходимо, я не уверен.
Кристофер Чиппс
2
Помните, что (большинство, если не все) оптические дисководы для ноутбуков необходимо сдвинуть, чтобы они закрылись, поскольку лоток не может выдвигаться автоматически. Я полагаю, что они могли каким-то образом заставить диск объявлять, поддерживает ли он автоматический отвод лотка или нет, и ОС могла бы отображать или скрывать опцию Закрыть на этом основании, но на самом деле это было бы слишком много времени и ресурсов, потраченных на что-то так тривиально и в основном бесполезно.
Каран
2
+1 за вопрос. @ekaj, хотя нет необходимости удаленно закрывать лоток для дисков, бывают случаи, когда такие функции удобны. Я удаленно создал компакт-диск для клиента и хотел убедиться, что запись прошла успешно, однако авторская программа автоматически извлекла диск. Дома, если меня не устраивает кодирование видео-рипа на сервере linux, я могу набирать текст eject -tсо своего ноутбука и перекодировать без необходимости ходить в шкаф сервера, чтобы закрыть лоток вручную. Довольно небольшое удобство, но, возможно, не так абсурдно, как предполагают отрицательные голоса.
Jthetzel

Ответы:

12

Единственный способ сделать это ММО без использования 3 - й партии утилит (например, NirCmd и Wizmo ) будет с помощью VBScript или PowerShell . Все решения VBScript, которые я видел до сих пор, используют устаревший Windows Media Player OCX. Я не знаю, включают ли последние версии WMP OCX с аналогичными функциями или нет, плюс отключение / удаление его с помощью функций Windows может в любом случае повлиять на работу сценария.

Обычный способ реализации этой функции с помощью кода с помощью интерфейса управления медиа (MCI) (API частности, набор команд ). Однако, поскольку VBScript не поддерживает вызов обычных функций Windows API или даже функций из произвольных библиотек DLL, это оставляет нас с PowerShell. Таким образом, следующее должно работать из коробки в Windows 7+, которая поставляется с предустановленной PS, и в XP / Vista после установки PS. MCI DLL, т.е. Windows \ System32 \ WinMM.dll, должна быть доступна как часть установки по умолчанию в XP +.

1) Сохраните следующее как CD_Open.ps1 :

$cd = Add-Type -memberDefinition @"
[DllImport("winmm.dll", CharSet = CharSet.Ansi)] public static extern int mciSendStringA(string lpstrCommand, string lpstrReturnString, int uReturnLength, IntPtr hwndCallback);
"@ -passthru -name mciSendString
$cd::mciSendStringA('set cdaudio door open', $null, 0, 0);

2) Сохраните следующее как CD_Close.ps1 :

$cd = Add-Type -memberDefinition @"
[DllImport("winmm.dll", CharSet = CharSet.Ansi)] public static extern int mciSendStringA(string lpstrCommand, string lpstrReturnString, int uReturnLength, IntPtr hwndCallback);
"@ -passthru -name mciSendString
$cd::mciSendStringA("set cdaudio door closed", $null, 0, 0);

Теперь приходит проблема. По умолчанию неподписанные сценарии PS не могут быть выполнены в Windows по соображениям безопасности. Введите get-help about_signingприглашение PS, чтобы узнать больше об этом, в том числе о том, как самостоятельно подписывать свои сценарии и так далее.

К счастью, есть обходной путь, как указано выше командой get-help :

TO PERMIT SIGNED SCRIPTS TO RUN
-------------------------------
   When you start Windows PowerShell on a computer for the first time, the
   Restricted execution policy (the default) is likely to be in effect.

   The Restricted policy does not permit any scripts to run.

   To find the effective execution policy on your computer, type:

       get-executionpolicy

   To run unsigned scripts that you write on your local computer and signed
   scripts from other users, use the following command to change the execution
   policy on the computer to RemoteSigned:

       set-executionpolicy remotesigned

   For more information, see Set-ExecutionPolicy.

3) Поэтому из командной строки с повышенными привилегиями выполните следующую команду:

powerhell set-executepolicy remotesigned

(Вы можете запустить, powershell set-executionpolicy restrictedчтобы вернуться к настройкам по умолчанию.)

Эту команду необходимо выполнить только один раз, и она действует до тех пор, пока вы снова не измените политику выполнения.

4) Теперь вы можете использовать следующие команды (даже из командной строки без повышенных прав) для открытия / закрытия лотка оптического привода:

powershell -file CD_Open.ps1
powershell -file CD_Close.ps1

Конечно, вы также можете создавать ярлыки, так что вы можете открывать / закрывать лоток одним нажатием или сочетанием клавиш:

Ярлыки лотка для компакт-дисков

Вы также можете добавить команду Close в контекстное меню вашего оптического привода, используя следующий файл .REG:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\Drive.CDROM\shell]
@="none"

[HKEY_CLASSES_ROOT\SystemFileAssociations\Drive.CDROM\shell\closetray]
@="Close"

[HKEY_CLASSES_ROOT\SystemFileAssociations\Drive.CDROM\shell\closetray\command]
@="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\Powershell.exe -windowstyle hidden -file I:\\CD_Close.ps1"

(Отредактируйте пути по мере необходимости. Кроме того, параметр -WindowStyle доступен только в PS 2.0+.)

Каран
источник
2
Я хотел бы +1 вам за сценарий PowerShell, а затем +1 снова за идею реестра.
Palswim
С одним из обновлений Windows 10 удалила мой Drive.CDROMключ из реестра. Я повторно добавил его к SystemFileAssociationsключу, и это решение все еще работает.
Palswim
4

Вот пример. Вот реализация в C # .. (может потребоваться DLL или две).

Их много, поэтому, если один не работает, попробуйте другой.

nerdwaller
источник
Ну, я сделал поиск. Но не мог найти, кроме загрузки чего-то. Командная вещь полезна, спасибо.
Реза М.
2

Я не пробовал это сам, но может быть, это поможет Link
Но вы должны скачать DLL
Вот исходный код C, чтобы сделать это, если вы хотите скомпилировать его самостоятельно, но вам нужно искать способ интеграции Скомпилированная программа в меню Windows Explorer, вызываемом правой кнопкой мыши для компакт-диска с кодом C

user13267
источник
Программа CDR, на которую вы ссылаетесь, включает в себя исполняемый файл в дополнение к исходному коду C. Из командной строки CDR close D:решена проблема необходимости удаленно закрывать лоток для дисков.
Jthetzel
0

Возможно, Ejectкнопка изначально была разработана для случаев аппаратного сбоя, когда аппаратная кнопка больше не реагировала.

Закрытие, с другой стороны, обычно можно сделать, просто вставив диск внутрь. Это может быть причиной того, что не было добавлено закрытие.

Также eject хорошо работает на виртуальных / смонтированных дисках (mac dmgs, любые смонтированные диски), usb-дисках (как безопасно удалить) и т. Д., Где нет версии close.

Картик Т
источник
Да, хороший момент для аппаратного сбоя. Не подумал бы об этом. Я мог видеть, что это правда во многих случаях, когда оригинальный дизайн / цель больше не применяются, но они все еще сохраняли это.
Реза М.
0

В Linux (и, следовательно, вероятно, в OSX, BSD, UNIX и т. Д. И т. Д.) «Для этого есть приложение»:

eject -t
terdon
источник
0

Вы не указали, какую версию Windows вы используете. Я только что заметил в моей системе Windows 2000, что программа CD Player (в Пуск> Стандартные> Развлечения) имеет кнопку извлечения. Нажатие на эту кнопку извлечения откроет лоток, если лоток закрыт, и закроет лоток, если лоток открыт.

pacoverflow
источник
0

есть другой способ. в проигрывателе Windows Media (по крайней мере, в 12), вы можете нажать вверху Play, затем Eject и выбрать свой диск. если он уже извлечен, ничего не произойдет. затем сделайте это снова, и он должен закрыть диск :)

darkflux
источник
0

Это небольшое приложение, которое добавляет кнопку на панель задач для открытия и закрытия оптического привода. http://digola.com/doorcontrol.html

Роджер К. Роча
источник
2
В вопросе говорилось «без использования какого-либо стороннего программного обеспечения».
Скотт