Controler l'état ouvert fermer cd. Il y a ds ce site moult code pour ouvrir ou fermer le cd. Mais j'ai vue que comme moi, certain cherchai à pouvoir controler l'état de l'ouverture du lecteur cd. (Ouvert ou fermer ?). alors g modifié un code que g récupéré sur ce site, en imaginant une astuce pour controler l'état. Elle utilise le temps. car g remarqué que ds ce code, lorsqu'il y a ejecter, le passage à l'instruction suivante n'est po instantannée (le tps d'ouvrir le cd par ex.). alors g posé deux variables de tps, si avant et après l'éxécution de l'instruction (qui ouvre ou ferme le cd) le temps est le meme, alors y a po eu évènement, c'est donc l'action inverse que l'utilisateur aurait voulu.
Source / Exemple :
Option Explicit
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Public Enum CD
EjecterCD = 2967560
FermerCD = 2967564
End Enum
Public Function Operation(ByVal Lecteur As String)
Dim hDrive As Long
Dim DriveLetterAndColon As String
Dim t1 As Variant
Dim t2 As Variant
Dim Action As CD
Action = EjecterCD
If Len(Lecteur) = 0 Then Exit Function 'Vérifie la présence d'un caractère
Do 'ne sortira de la boucle qu'une fois l'action effectuée
DriveLetterAndColon = UCase(Left$(Lecteur & ":", 2)) 'Met en majuscule pour une interprétation facile
hDrive = CreateFile("\\.\" & DriveLetterAndColon, GENERIC_READ Or GENERIC_WRITE, 0, ByVal 0, 3, 0, 0)
If hDrive = -1 Then Exit Function
t1 = Time '1ere variable de tps
Call DeviceIoControl(hDrive, Action, 0, 0, 0, 0, 0, ByVal 0)
t2 = Time '2eme variable de tps
If Action = EjecterCD Then
Action = FermerCD 'inverse la donne
Else
Action = EjecterCD
End If
Call CloseHandle(hDrive) 'indispensable
Loop Until (t2 - t1) <> 0 'ouvrir ou fermer prends du tps
'donc sortie qd il y a eu du tps qui s'est écoulé durant l'action
End Function
Conclusion :
en appelant la fonction, le résultat ouvrira le cd s'il est fermé ou le fermera s'il est ouvert.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.