[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/11/22(Tue) 16:09
投稿者名:
Eメール:
URL :
タイトル:
CD-ROMドライブとDVDドライブの区別
OS:Windows2000以上 Ver:VB6

お世話になります。

現在CD-ROMドライブをFileSystemObjectを利用して認識し、そこからデータを読み込んでいるのです

データ量が多くなってきたため媒体をCD-ROMからDVD(DVD-R)に変えることになりました。
試しにソースコードに手を加えずに実行するとFileSystemObjectではCD-ROMドライブとして
認識するようです。

しかし、エンドユーザの環境は不定のためCD-ROMドライブとDVDドライブが共存している場合も
あると思うのですが、CD-ROMドライブとDVDドライブを区別する方法が判りません。
何かいい方法がありましたら教えてください。 よろしくお願いします。

現在の処理手順は
@(A:)に対してDriveTypeを取得
ACD-ROMドライブならトレイオープン。違ったら(B:)に対して@を実行(以下C:、D:…と順に確認

BCD-ROMドライブの準備ができたらCD内のディスク番号ファイル(○枚目中の○枚目等を保存)をチ
ェック
Cディスク番号が合っていればデータ読み込み。違ったらトレイをオープンしBに戻る
Dトレイをオープンし、次のディスクを要求 → Bに戻る
となっています。

Aの部分にDVDドライブか否かの判定が入れられればいいのですが…。

投稿時間:2005/11/22(Tue) 16:35
投稿者名:いな
Eメール:
URL :http://,
タイトル:
Re: CD-ROMドライブとDVDドライブの区別
hhttp://homepage1.nifty.com/MADIA/vb/API/GetDriveType.htm

だめかな

投稿時間:2005/11/22(Tue) 17:20
投稿者名:GOD
Eメール:
URL :
タイトル:
Re: CD-ROMドライブとDVDドライブの区別
hhttp://www.accessclub.jp/bbs5/0004/vba806.html
↑でどうかな。

#なぜ判定がいるかわかりません。DVDドライブでもCDは読めるはずですが。

投稿時間:2005/11/22(Tue) 17:20
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: CD-ROMドライブとDVDドライブの区別
> OS:Windows2000以上 Ver:VB6
> エンドユーザの環境は不定のため
OSのバージョンだけは確定しているのでしょうか?

とりあえず、手抜き実装。

Dim O As Object
For Each O In GetObject("winmgmts:\\.\root\cimv2").InstancesOf("Win32_CDROMDrive")
    Debug.Print "ドライブ="; O.Drive
    Debug.Print , "DVD読込="; O.Caption Like "*DVD*"
    Debug.Print , "CD書込="; O.Caption Like "*RW*"
Next

投稿時間:2005/11/22(Tue) 18:40
投稿者名:
Eメール:
URL :
タイトル:
Re: CD-ROMドライブとDVDドライブの区別
いなさん、GODさん、魔界の仮面弁士さん回答ありがとうございます。

>いなさん
試してみましたがCD-ROMドライブ、DVDドライブともに5(CD-ROM)として認識してしまいました。

>GODさん
同じく試してみましたが、DriveType、MediaType共にどちらも同じ値(5,11)で判別できませんでした。
確かにDVDドライブでもCDは読めるのですが、今回は媒体がDVDに変わってしまいます。
そのためCD-ROMドライブではDVDが読めないので判定が必要となりました。
もし両ドライブが共存しているとどちらがどちらか判らないので…。

>魔界の仮面弁士さん
同様に試してみました。
無事DVDドライブであることが取得できました。以下確認に使ったコードです。

Dim Drv As String
Dim OK_Flg As Boolean
OK_Flg = False

Dim O As Object
For Each O In GetObject("winmgmts:\\.\root\cimv2").InstancesOf("Win32_CDROMDrive")
    If O.Caption Like "*DVD*" Then
        Drv = O.Drive
        OK_Flg = True
        Exit For
    End If
Next

If OK_Flg = True Then
    MsgBox Drv &"ドライブに1枚目のDVDをセットしてください"
Else
    MsgBox "DVDドライブがありません"
    Exit Sub
EndIf
〜以下データ読み込み処理

これでなんとかなりそうです。
お三方ともどうもありがとうございました。

投稿時間:2005/11/22(Tue) 19:26
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^2: CD-ROMドライブとDVDドライブの区別
こんな書き方もあります。

Drv = ""
Q = "SELECT Drive FROM Win32_CDROMDrive WHERE Caption Like '%DVD%'"
For Each O In GetObject("winmgmts:\\.\root\cimv2").ExecQuery(Q)
    Drv = O.Drive
    Exit For
Next
If Drv = "" Then
    MsgBox "DVDドライブがありません"
Else
    MsgBox Drv & "ドライブに1枚目のDVDをセットしてください"
End If

投稿時間:2005/11/24(Thu) 11:34
投稿者名:
Eメール:
URL :
タイトル:
Re^3: CD-ROMドライブとDVDドライブの区別
度々ありがとうございます。

クエリで抽出する方法も試してみましたが、オートメーションエラーが発生してしまいました。
もしかしてWindowsXPじゃないとダメとかなのでしょうか?

先日の方法ではうまく動いているので、今回はそちらの処理で対応しようと思います。
ありがとうございました。

投稿時間:2005/11/24(Thu) 11:58
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^4: CD-ROMドライブとDVDドライブの区別
> クエリで抽出する方法も試してみましたが、オートメーションエラーが発生してしまいました。
情報提供、ありがとうございます。m(_ _)m
手元の Windows 2000 環境で、エラーになる事を確認できました。失礼しました。

> もしかしてWindowsXPじゃないとダメとかなのでしょうか?
そうみたいですね。WQL 中に書いた LIKE 演算子がいけなかったようです。

hhttp://msdn.microsoft.com/library/en-us/wmisdk/wmi/like_operator.asp
》The LIKE operator is available on Microsoft Windows XP and Windows Server 2003.