web-dev-qa-db-ja.com

Windowsでオプティカルドライブトレイを閉じる方法

なぜWindowsにEjectオプションがあるのに、対応するClose/Close Trayオプションがオプティカルドライブのコンテキストメニューに含まれていないのか、いつも疑問に思っていました。

光学ドライブトレイを閉じる方法はありますかなし Windowsでサードパーティのソフトウェアを使用していますか?

7
Reza M.

3を使用せずにこのIMOを実行する唯一の方法rd パーティユーティリティ( NirCmd および Wizmo など)は、VBScriptまたはPowerShell。これまで見てきたすべてのVBScriptソリューションは、古いWindows Media Player OCXを使用しています。 WMPの最新バージョンに同様の機能を持つOCXが含まれているかどうかはわかりません。さらに、 Windowsの機能を使用して無効化/アンインストールすると、いずれの場合でもスクリプトの機能が妨げられる可能性があります。

コードを介してこの機能を実装する一般的な方法は、 Media Control Interface(MCI) APIs(具体的には set command を使用することです。 =)。ただし、VBScript サポートしていません 通常のWindows API関数または任意のDLLからの関数を呼び出すため、PowerShellが残ります。したがって、以下は、PSがプリインストールされているWindows 7以降、およびPSがインストールされた後のXP/Vistaでそのまま使用できます。 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) elevated コマンドプロンプトから、次のコマンドを実行します。

powershell set-executionpolicy remotesigned

powershell set-executionpolicy restrictedをクリックしてデフォルト設定に戻します。)

このコマンドは1回だけ実行する必要があり、実行ポリシーを再度変更するまで有効です。

4)これで、(昇格していないコマンドプロンプトからでも)次のコマンドを使用して、光学ドライブトレイを開閉できます。

powershell-ファイルCD_Open.ps1
powershell -file CD_Close.ps1

もちろん、ショートカットを作成して、クリックまたはキーのコンボでトレイを開閉することもできます。

CD Tray Shortcuts

次の.REGファイルを使用して、光学ドライブのコンテキストメニューに Close コマンドを追加することもできます。

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+でのみ使用できます。)

12
Karan

ここ は例です。 ここ はC#での実装です。(DLLまたは2つ必要になる場合があります)。

それらはたくさんあるので、うまくいかない場合は別のものを試してください。

4
nerdwaller

私はこれらを自分で試したことはありませんが、これは役立つかもしれません Link
しかし、dllをダウンロードする必要があります
これを自分でコンパイルする場合に実行するCソースコードですが、CDドライブのWindowsエクスプローラーの右クリックメニューでコンパイル済みプログラムを統合する方法を探す必要があります Cコード

2
user13267

Ejectボタンは、元々ハードウェアボタンが応答しなくなったハードウェア障害の場合のために設計された可能性があります。

一方、クローズは通常、ドライブを押し込むだけで実行できます。これがクローズを追加しない理由かもしれません。

また、イジェクトは、仮想/マウントされたドライブ(mac dmgs、マウントされたドライブ)、USBドライブ(安全に削除できる)などで、closeのバージョンがない場合にうまく機能します。

0
Karthik T

Linuxでは(したがって、おそらくOSXやBSD、UNIXなどでも)、「そのためのアプリがあります」:

eject -t
0
terdon

これは、光学ドライブを開閉するためのタスクバーにボタンを追加する小さなアプリです。 http://digola.com/doorcontrol.html

0
Roger C. Rocha

実行しているWindowsのバージョンを指定していません。 Windows 2000システムでCDプレーヤープログラム([スタート]> [アクセサリ]> [エンターテイメント])にイジェクトボタンがあることに気づきました。そのイジェクトボタンをクリックすると、トレイが閉じている場合はトレイが開き、開いている場合はトレイが閉じます。

0
pacoverflow

別の方法があります。 Windows Media Player(少なくとも12では)では、上部にある[再生]をクリックし、次に[取り出し]をクリックして、ドライブを選択できます。すでに排出されている場合は、何も起こりません。その後、それをもう一度実行すると、ドライブが閉じられます。

0
darkflux