私はDVD書き込みロボットに取り組んでいます。プロセスの一環として、DVDトレイを開閉して、書き込み後にロボットがディスクを取り出せるようにする必要があります。しかし、私は問題に遭遇しました。私は1台のDVDレコーダーでしかイジェクトを制御できません!私は2つ持っているので、これは問題です。私はこれを何時間も見ていて、何が悪いのか理解できません。1枚のDVDをうまく制御できますが、別のクラスに挿入すると機能しません。これが以下のクラスです。私はおそらく単純な何かを見逃していることを知っていますが、私の人生のためにそれを理解することはできません。
Public Class openCloseDrive
'Api call to send the commands to the mci device
Private Declare Function mciSendString Lib "winmm.dll" Alias _
"mciSendStringA" (ByVal lpstrCommand As String, ByVal _
lpstrReturnString As String, ByVal uReturnLength As Integer, _
ByVal hwndCallback As Integer) As Integer
'
'Api call to check for mci success or error
Private Declare Function mciGetErrorString Lib "winmm.dll" Alias _
"mciGetErrorStringA" (ByVal dwError As Integer, ByVal lpstrBuffer _
As String, ByVal uLength As Integer) As Integer
'will hold the mci return value
Dim retVal As Integer = Nothing
'This will contain the drive letter of the specified cd drive.
Dim _cdDrive As String = Nothing
Public Sub New(_driveLetter As String)
_cdDrive = Chr(34) & _driveLetter & Chr(34)
End Sub
Public Function Open() As Integer
'This will open the DVD Tray
Dim retVal As Integer
'This will Open the CD Drive Tray.
mciSendString("open " & _cdDrive & " type cdaudio alias cd wait shareable", 0, 0, 0)
retVal = mciSendString("set cd door open", 0, 0, 0)
Return retVal
End Function
Public Function Close() As Integer
'this Will close the DVD tray
Dim retVal As Integer
'This will Close the CD Drives Tray door.
mciSendString("open " & _cdDrive & " type cdaudio alias cd wait shareable", 0, 0, 0)
retVal = mciSendString("set cd door closed", 0, 0, 0)
Return retVal
End Function
Public ReadOnly Property devices_InternalMCIStatus() As String
'
'Check the mci device to see if a error occured, and/or give
'some type of description even if everything was executed ok.
'
'Use this property if you want to, after each command you carried
'out to check and see if the command was successfully executed or
'not. It will tell you the status whether it was successful or not.
'
Get
'
'Make the length of this buffer 255 spaces since the returned
'value could get pretty long, depending on what is going on.
Dim buf As String = Space(255)
mciGetErrorString(retVal, buf, 255)
Return buf
buf = Nothing
End Get
End Property
エンドクラス