Newsgroup: it.comp.lang.visual-basic
Titolo: Manovra cassetto CD

Per asprire e chiudere i cassetti dei CD ho usato le serguenti istruzioni:
Private Sub Command2_Click(index As Integer)
 If index = 0 Then
    mciSendString "open Y: type cdaudio alias slave", vbNullString, 0, 0
    mciSendString "set slave door open", vbNullString, 0, 0
 Else
    mciSendString "open Y: type cdaudio alias slave", vbNullString, 0, 0
    mciSendString "set slave door closed", vbNullString, 0, 0
 End If
End Sub
Qui c'è un tasto per aprire ed uno per chiudere, vorrei farlo con un tasto 
solo, per cui dovrei sapere se il cassetto è aperto o chiuso.
Ho cercato fra le api una che mi torni lo status del cassetto, ma non sono 
stato capace di trovarla.
C'è qualcuno tanto gentile che mi suggerisca l'istruzione per conoscere lo 
stato del cassetto?
molte grazie a chi mi aiuta.
Peppe
peppe26 chiocciola tele2 punto it

"Peppe12"
'quello che adopero io :
' 2 command button nominati cmdOpen e cmdClose
Private Declare Function mciGetErrorString Lib "winmm.dll" _
Alias "mciGetErrorStringA" (ByVal dwError As Long, ByVal _
lpstrBuffer As String, ByVal uLength As Long) As Long
Private Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" (ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, ByVal uReturnLength _
As Long, ByVal hwndCallback As Long) As Long
Function Sleep(time)
   Start = Timer
   Do While Timer < Start + time
      DoEvents
   Loop
End Function
Private Sub Form_Load()
SendMCIString "close all", False
cmdClose.Visible = False
If (App.PrevInstance = True) Then
    End
End If
fCDLoaded = False
If (SendMCIString("open cdaudio alias cd wait shareable", True) _
= False) Then
    End
End If
SendMCIString "set cd time format tmsf wait", True
SendMCIString "set cd door open", True
cmdClose.Visible = True
cmdClose.Default = True
Sleep (0.1)
'SendKeys "{right}"
cmdOpen.Visible = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
SendMCIString "close all", False
End Sub
Private Function SendMCIString(cmd As String, _
fShowError As Boolean) As Boolean
Static rc As Long
Static errStr As String * 200
rc = mciSendString(cmd, 0, 0, hWnd)
If (fShowError And rc <> 0) Then
    mciGetErrorString rc, errStr, Len(errStr)
    MsgBox errStr
End If
SendMCIString = (rc = 0)
End Function
' Open CD
Private Sub cmdopen_Click()
End Sub
Private Sub cmdclose_click()
SendMCIString "set cd door closed", True
cmdOpen.Visible = True
cmdClose.Visible = False
cmdClose.Default = False
cmdOpen.Default = True
Unload Me
End Sub
--
Fosco

 'quello che adopero io :
Ringrazio tantissimo tutti quelli che mi hanno aiutato, ma purtroppo nulla 
che mi torni lo stato del cassetto.
Le istruzioni sono tutte per aprire e chuudere il cassetto.
Se leggo il messaggio di ritorno mi da sempre il messaggio di manovra 
eseguita correttamente.
la frase magica  "status media present" vale solo se il cd è presente ma non 
se il cassetto è vuoto.
Il mio scopo era di creare un programmino da associare a due tastini della 
tastiera multimediale per aprire e chiudere i cassetti del DVD e del 
masterizzatore senza fare contorsioni per accedervi.
Quindi il programma doveva fare:
1 Vedere se il cassetto era aperto o chiuso
2 in conseguenza dello stato doveva inviare il comando di chiusura ed 
apertura e sparire.
Ma per quante ricerche anche remote ed anche in USA abbia fatto non sono 
riuscito a trovare nulla sull'argomento.
Ringrazio il 'mago delle pezze' per la sua astuzia ma nel mio caso non è 
applicabile.
E farò anche io una inelegante pezza, associo un file ini al programma nel 
quale ci sta la flag di aperto o chiuso.
Ogni volta che il programma parte apre o chiude a seconda della flag ed 
inverte la flag nel file.
Al massimo il tasto va premuto 2 volte.
Che ve ne pare? orribile vero?
Grazie ancora a tutti.


"Peppe12"
se e vuoto o pieno se po' fa' .. se e' aperto o chiuso
non ho visto niente... ma non e' che abbia cercato
--
Fosco