〜 メディア 〜
CDドライブのトレイを自動開閉

ファイルのほか、CDからも読み込めるようにするプレーヤーを作成する時に必要になる機能です。
CDトレイを自動的に開閉させるには標準のmci命令の「set」コマンドだけで実験できます。
但し、手動で閉じなければならないタイプのトレイは当然ながら自動的には閉じられませんのでご了承ください。
「mci "set cdaudio door open"」とCDトレイを開ける時に記述し、
「mci "set cdaudio door closed"」とCDトレイを閉じる時に記述するわけですが、
この記述正常動作するのは、ディスクドライブが1つ、または先頭(若い方)のCDドライブを操作する時で、
仮想ドライブやDVDドライブ等、複数ドライブが並んでいるとうまくいかないことがあります。
「mci "set cdaudio!X door open"」と記述することでXドライブをオープンし、
「mci "set cdaudio!X closed"」とい記述すればXドライブをクローズします。
尚、「!ドライブ名」部分は「!ドライブ名:」や「!ドライブ名:¥¥」としても正常動作する模様。
サンプルではAドライブを1、Bドライブを2…Zドライブを26としたドライブ番号を指定する形にして、
ドライブ番号が0だと、先頭(若い方)のCD/DVDドライブを指定されたものとして処理する様にしました。
	

mcicdopen ドライブ番号
ドライブ番号Aドライブを1、Bドライブを2…Zドライブを26として、トレイを開くドライブ番号を指定する。

mcicdclose ドライブ番号
ドライブ番号Aドライブを1、Bドライブを2…Zドライブを26として、トレイを閉じるドライブ番号を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#module
#deffunc mcicdopen int
	mref root, 0
	if root : s = "!?:" : poke s, 1, root + 64 : else : s = ""
	mci "set cdaudio" + s + " door open"
	return

#deffunc mcicdclose int
	mref root, 0
	if root : s = "!?:" : poke s, 1, root + 64 : else : s = ""
	mci "set cdaudio" + s + " door closed"
	return
#global

	sdim drv, 128
	repeat 26, 1
		if cnt > 1 : drv += "\n"
		wpoke drv, (cnt - 1) * 3, (':' << 8) + cnt + 64 // コンボボックス用に「A: B: C: … Z:」を格納
	loop
	pos 10, 10 : combox index, 100, drv
	pos 10, 40 : button "開", *open
	pos 10, 70 : button "閉", *close
	stop

*open
	mcicdopen index + 1
	stop

*close
	mcicdclose index + 1
	stop

mcicdopen ドライブ番号
ドライブ番号Aドライブを1、Bドライブを2…Zドライブを26として、トレイを開くドライブ番号を指定する。

mcicdclose ドライブ番号
ドライブ番号Aドライブを1、Bドライブを2…Zドライブを26として、トレイを閉じるドライブ番号を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#module
#deffunc mcicdopen int root, local s
	if root : s = "!?:" : poke s, 1, root + 64 : else : s = ""
	mci "set cdaudio" + s + " door open"
	return

#deffunc mcicdclose int root, local s
	if root : s = "!?:" : poke s, 1, root + 64 : else : s = ""
	mci "set cdaudio" + s + " door closed"
	return
#global

	sdim drv, 128
	repeat 26, 1
		if cnt > 1 : drv += "\n"
		wpoke drv, (cnt - 1) * 3, (':' << 8) + cnt + 64 // コンボボックス用に「A: B: C: … Z:」を格納
	loop
	pos 10, 10 : combox index, 100, drv
	pos 10, 40 : button gosub "開", *open
	pos 10, 70 : button gosub "閉", *close
	stop

*open
	mcicdopen index + 1
	return

*close
	mcicdclose index + 1
	return