〜 メディア 〜
CDドライブにディスクがセットされたか調査

重要な情報ではなく、あると尚良い…って程度のものかと思いますが、
CD/DVDドライブに現在ディスクがセットされているかをチェックするTipsです。
また、同時にコチラと同じようにCD/DVDドライブが存在するかのチェックも行うことができます。
ディスクの有無をチェックするには「mci "status cdaudio media present"」というように記述しますが、
この記述で正常動作するのは、ディスクドライブが1つ、または先頭(若い方)のCDドライブを操作する時で、
仮想ドライブやDVDドライブ等、複数ドライブが並んでいる場合はうまく行かないことがあります。
例えばXドライブをチェックするには「mci "status cdaudio!X media present"」と記述しましょう。
「!ドライブ名」部分は「!ドライブ名:」や「!ドライブ名:¥¥」としても正常動作します。
サンプルではAドライブを1、Bドライブを2…Zドライブを26としたドライブ番号を指定する形にして、
ドライブ番号が0だと、先頭(若い方)のCD/DVDドライブを指定されたものとして処理する様にしました。
尚、セットされている場合はrefstrtrueが、セットされてない場合はfalseが入り、
そもそもCD/DVDドライブではない場合はrefstrに何もセットされません。
また、同時にCD/DVDドライブではないならstat−1が返るようになっています。
	

mcicdcheck ドライブ番号
ドライブ番号Aドライブを1、Bドライブを2…Zドライブを26として、トレイを開くドライブ番号を指定する。
尚、ディスクが入っている場合はtrueが、入っていない場合はfalseがrefstrに入る。
そもそも、CD/DVDドライブではない場合は空文字が返るようになっている。

 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
#module
#deffunc mcicdcheck int
	mref root, 0
	if root : s = "!?:" : poke s, 1, root + 64 : else : s = ""
	mci "status cdaudio" + s + " media present"
	return
#global

	sdim drv, 80
	repeat 26, 1
		mcicdcheck cnt
		if refstr = "true" {
			drv += "[?]"
			strlen i, drv
			poke drv, i - 2, cnt + 64
		} else {
			if stat = 0 : exists = 1 // 1つ以上、CD/DVDドライブが存在する
		}
	loop
	pos 10, 10
	if drv = "" {
		if exists {
			mes "CD/DVDドライブにディスクはセットされていません"
		} else {
			mes "ディスクをセットするCD/DVDドライブは搭載されていません"
		}
	} else {
		mes drv + "ドライブにディスクがセットされています"
	}
	stop

結果 = mcicdcheck(ドライブ番号)
結果ディスクが入っている(=true)のか、入っていない(=false)のかの文字列受取先を指定する。
そもそも、CD/DVDドライブではない場合は空文字が返るようになっている。
ドライブ番号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
#module
#defcfunc mcicdcheck int root, local s
	if root : s = "!?:" : poke s, 1, root + 64 : else : s = ""
	mci "status cdaudio" + s + " media present"
	return refstr
#global

	sdim drv, 4
	repeat 26, 1
		if mcicdcheck(cnt) = "true" {
			drv += "[?]"
			poke drv, strlen(drv) - 2, cnt + 64
		} else {
			if stat = 0 : exists = 1 // 1つ以上、CD/DVDドライブが存在する
		}
	loop
	pos 10, 10
	if drv = "" {
		if exists {
			mes "CD/DVDドライブにディスクはセットされていません"
		} else {
			mes "ディスクをセットするCD/DVDドライブは搭載されていません"
		}
	} else {
		mes drv + "ドライブにディスクがセットされています"
	}