mciSendString でCDドライブの動作をコントロールするプログラムを
組んでいます。
その中で、システムに接続されているCDドライブの一覧は
GetLogicalDriveStrings と GetDriveType を組みあわせることで
取得できているのですが、
マルチメディアのデフォルトドライブに設定されている(と思われる)
CDドライブ名をプログラムで取得する方法がわかりません。
(mciSendString を "CDAUDIO" などの暗示名で使うのではなく、
デフォルトドライブ名を明示的に指定して使いたいのです。)
mciSendString の status や capability や info などの
各情報系コマンドを使ってみたりしましたが、取り出せませんでした。
そういう用途に使えるAPIやうまい方法はないものでしょうか?
ぜひご教授いただきたくよろしくお願いします。
開発環境:WindowsXP-SP2 + VB6.0-SP6
なお実行ターゲットも基本的にはWindowsXPなのですが、
できればWindows2000、WindowsNT、Windows9x いずれでも動作させたい
と考えています。
MCIコマンドについては詳しくないのですが、
もともとデバイスにデフォルト属性みたいなものはあるのでしょうか?
総数は取得できるので、勝手に設定するとか。。
実現したいことは、認識できたCDドライブの名前だけを
コンボボックスに列記し、そのうちデフォルト設定のドライブ名を
初期選択させておきたい、ということなのです。
ex. 認識されているCDドライブが E: 、F: 、G: の3台で
デフォルトが F: の場合、
コンボボックスに
E:
F:
G:
と表示させた上で F: を初期選択(反転表示)したい。
ということです。
適当に最も若いドライブ(上記の場合 E:)を強制的に初期選択する
ようなことはしたくないのです。
(その実現なら、コンボボックスにドライブ名をセットした後で
強制的にインデックスを 0 にすればできますけどね。。。)
なお、Windows9x系や、WindowsNTであれば、
コントロールパネル => 「マルチメディア」 => 「音楽CD」タブに
デフォルトCDドライブを指定するコンボボックスがあるのですが、
WindowsXPでは同様の設定項目が見つかりません。
ですが、WindowsXPでも複数のCDドライブが認識されている場合には
mciコマンドのデフォルトCDドライブ指定("cdaudio")を使うと、
最も若い番号のCDドライブが反応するPCと、そうでないPCがあるので、
どこかでWindowsXP自体もデフォルトCDドライブを保存しているようです。
(多くの場合は、Windowsインストールに使われたと思われる
最も若いCDドライブがデフォルトになっているようです。)
そこで、何らかの方法でそのデフォルトCDドライブの番号などの情報を
取り出して使いたい、と考えています。
(おそらくはレジストリに情報があるのだと思いますが、
それがどこなのかもよくわかりません。)
mciコマンドは、下記のように使っています。
(mciコマンドをご存知の方は読み飛ばしてください。
もしくは使い方がおかしいと思われる方はぜひご指摘ください。)
デバイス初期動作時のオープン(デフォルト指定でデバイスをオープン)
Call mciSendString("open cdaudio", vbNullString, 0, 0)
* "open cdaudio" の cdaudio が、CDデバイスのデフォルト指定です。
デバイスの操作(デフォルト指定でドアを開く)
Call mciSendString("set cdaudio door open wait", vbNullString, 0, 0)
デバイス操作の終了(デフォルト指定でデバイスをクローズする)
Call mciSendString("close cdaudio", vbNullString, 0, 0)
デバイス初期動作時のオープン(明示指定した F: のCDデバイスをオープン)
Call mciSendString("open F: type cdaudio alias CDD", vbNullString, 0, 0)
* 以降のmciコマンドではエイリアス名"CDD"で指定します。
デバイスの操作(エイリアス名でドアを開く)
Call mciSendString("set CDD door open wait", vbNullString, 0, 0)
デバイス操作の終了(エイリアス名でデバイスをクローズする)
Call mciSendString("close CDD", vbNullString, 0, 0)
その後、いろいろ調べてみましたが、どうもWindowsMe(Windows2000も?)
以降のWindowsではマルチメディアデバイスとしてCDドライブをデフォルト指定する箇所自体がないのではないかという気がしてきました。
そこで、手持ちの実機に複数ドライブ装備を用意し、
ドライブ名や順序をいろいろと変更して、mciSendString をデフォルト指定
で使うときにどのドライブが反応するかを試したところ、
mciSendString の "cdaudio" 指定に反応するドライブは、
「実装されているCDドライブのうち、先頭のもの」のようである、
との結論に達しました。
上記により、とりあえず求める機能は実装できそうですので、
これにて解決としておきます。 ありがとうございました。
ツイート | ![]() |