【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トレイを閉じることが可能か判断するコード」はないだろうかと考えたのですが
調べても存在するのかどうかすらわかりません(調べ方がそもそも間違っているのかもしれません)。

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/12/01 00:15:45
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:freemann No.2

回答回数335ベストアンサー獲得回数55

ポイント250pt

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

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

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

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

id:harunoharuno

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

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

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

なので、、戻り値は、

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

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

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

2009/11/27 10:40:37

その他の回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント50pt

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

あいてたら 不可能

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

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

あいてたら 可能

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

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


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

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

id:freemann No.2

回答回数335ベストアンサー獲得回数55ここでベストアンサー

ポイント250pt

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

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

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

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

id:harunoharuno

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

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

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

なので、、戻り値は、

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

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

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

2009/11/27 10:40:37
id:ardarim No.3

回答回数897ベストアンサー獲得回数145

ポイント400pt

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 する方法

id:harunoharuno

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

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

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

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

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

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

大変参考になりました。

2009/12/01 00:14:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません