人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【C#を用いCDトレイを閉じることができるか判断する方法について教えてください。】

以前C#でCDトレイを開閉する方法について質問し

mciSendString("open " + drive + " type cdaudio alias orator", null, 0, IntPtr.Zero);
int canEject = mciSendString("capability orator can eject", null, 0, IntPtr.Zero); ←?
Console.WriteLine("{0}はイジェクト{1}です。", drive, (canEject == 0) ? "可能" : "不可"); ←?
Console.WriteLine("{0}ドライブを開きます。", drive);
mciSendString("set orator door open", null, 0, IntPtr.Zero);
Console.WriteLine("{0}ドライブを閉じます。", drive);
mciSendString("set orator door closed", null, 0, IntPtr.Zero);
mciSendString("close orator", null, 0, IntPtr.Zero);

の方法を教えていただきました。
このコードの、
「事前にCDトレイをあけることが可能であるかを判断するコード」(?と?)をみて、

同じように「事前にCDトレイを閉じることが可能か判断するコード」はないだろうかと考えたのですが
調べても存在するのかどうかすらわかりません(調べ方がそもそも間違っているのかもしれません)。

現状、お手上げ状態です。どうかお知恵を貸していただきたくよろしくお願いします。

●質問者: harunoharuno
●カテゴリ:コンピュータ
✍キーワード:C# CD Console open SET
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●50ポイント

あけることが可能かどうかということは、

あいてたら 不可能

しまってたら 可能 ということなので

閉じることが 可能 ということは

あいてたら 可能

しまってたら 不可能 と判断されるわけなので

?の結果を 逆に捕らえればいいだけなのでは?


それとも もっと別に知りたいことが あるのかな?

http://q.hatena.ne.jp/1259243956


2 ● freemann
●250ポイント ベストアンサー

このEJECTというのは、吐き出すという意味のようですが、この場合は閉じることも可能という事になるのではないでしょうか?

なお調べてみましたが、閉じることが可能か?というような、提示された以外のコマンドでは無いようです。

下記URLの最後の方にコマンド一覧があります。

http://www.e-douguya.com/eq/tech/mci.shtml

◎質問者からの返答

コマンド一覧を紹介いただきありがとうございます。大変参考になります。

「CDトレイを閉じるコマンド」をプログラムから指示できない(押しボタン式で閉じるタイプ)PCの

CDトレイを空けたままで?のコマンドを実行してみたところ、戻り値が0(==できる)になることを確認しました。

なので、、戻り値は、

プログラムでの指示が可能であるかどうか?

を返しているわけではない気がします。

(たんに開閉できるかどうかを返している・・・?)


3 ● ardarim
●400ポイント

mciSendStringは上位アプリケーション用のAPIですが、そのAPIが利用しているよりももっと下位のデバイスドライバレベルで「閉じることができるかどうか」についての情報を提供しているようには見えませんので、少なくともWindowsアプリケーションで(マネージドかネイティブかに関わらず)、汎用の方法で「閉じることができるかどうか」をプログラムから知ることは不可能のように思います。


General Storage I/O Control Codes(CD-ROMを含むストレージデバイスドライバがサポートする機能)

トレイを開ける(IOCTL_STORAGE_EJECT_MEDIA)、トレイを閉じる(IOCTL_STORAGE_LOAD_MEDIA)はありますが、「閉じられるかどうか」を確認する機能はありません。


特定のドライブ用のドライバが専用の「閉じられるかどうか」を確認する機能を、ドライバレベルで提供している可能性はありますが、汎用性はありません。


なお「閉じる」コマンドを実行した後、実際に「閉じた」か、「閉じるのに失敗した」かはエラーコードで取得することができます(mciSendStringの場合は、戻り値で取れると思います)。失敗した場合は「手動で閉じてください」等のメッセージを表示することは可能です。


参考:ネイティブアプリケーション(アンマネージド)からデバイスドライバを直接制御して開閉する方法

Windows NT または Windows 2000 または Windows XP でリムーバブル メディアを Ejecting する方法

◎質問者からの返答

回答ありがとうございます。

「CDトレイが開閉可能か事前に調べることができるか?」は

デバイスドライバがその情報を返すかによるところですね。

直接デバイスドライバを制御することで

対応できるケースもありそうですが・・・、メーカ独自の仕様が

多いのでしたら汎用性がなくなり面白みも減ってしまいます。

大変参考になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ