Ejecter un cd en fonction de la lettre du lecteur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 620 fois - Téléchargée 48 fois

Contenu du snippet

Ce code permet d'éjecter le lecteur CD que l'on désire en fonction de la lettre du lecteur. Il permet aussi, sous Windows NT/2000/XP de le charger via programmation.
Ce code ravira tous les programmeurs désirant controler plusieurs lecteurs de CD.

Source / Exemple :


' Vous devez placer 2 boutons de commande (Command1) et (Command2)

Option Explicit

Private Declare Function GetVersion Lib "kernel32" () As Long
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 INVALID_HANDLE_VALUE = -1
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_DELETE_ON_CLOSE = 67108864
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const IOCTL_STORAGE_EJECT_MEDIA = 2967560 'Pour éjecter le lecteur
Private Const IOCTL_STORAGE_LOAD_MEDIA = 2967564 'Pour charger le lecteur
Private Const VWIN32_DIOC_DOS_IOCTL = 1
 
Private Type DIOC_REGISTERS
    reg_EBX As Long
    reg_EDX As Long
    reg_ECX As Long
    reg_EAX As Long
    reg_EDI As Long
    reg_ESI As Long
    reg_Flags As Long
End Type

Private Enum Eject
    EJECT_MEDIA = 2967560
    LOAD_MEDIA = 2967564
End Enum

Private Sub Command1_Click()
    Operation EJECT_MEDIA
End Sub

Private Sub Command2_Click()
    Operation LOAD_MEDIA
End Sub

Private Sub Form_Load()
    Command1.Caption = "Ejecter"
    Command2.Caption = "Charger"
End Sub

Private Sub Operation(Action As Eject)
    Dim hDrive As Long, DummyReturnedBytes As Long
    Dim Ejecter As String, DriveLetterAndColon As String
    Dim RawStuff As DIOC_REGISTERS
    Ejecter = InputBox("Quel lecteur dois-je éjecter ?", "Ejecter un lecteur")
    If Len(Ejecter) Then 'Vérrifie que l'utilisateur n'ai pas appuyé sur Cancel
        DriveLetterAndColon = UCase(Left$(Ejecter & ":", 2)) 'Met en majuscule pour une interprétation facile
        If GetVersion >= 0 Then 'Tourne sous NT/2000/XP
            hDrive = CreateFile("\\.\" & DriveLetterAndColon, GENERIC_READ Or GENERIC_WRITE, 0, ByVal 0, OPEN_EXISTING, 0, 0)
            If hDrive <> INVALID_HANDLE_VALUE Then
                'Ejection du lecteur
                Call DeviceIoControl(hDrive, Action, 0, 0, 0, 0, DummyReturnedBytes, ByVal 0)
                Call CloseHandle(hDrive)
            End If
        Else  'Tourne sous Win9x/Me
            hDrive = CreateFile("\\.\VWIN32", 0, 0, ByVal 0, 0, FILE_FLAG_DELETE_ON_CLOSE, 0)
            If hDrive <> INVALID_HANDLE_VALUE Then
                RawStuff.reg_EAX = &H440D   'La fonction à utiliser
                RawStuff.reg_EBX = Asc(DriveLetterAndColon) - Asc("A") + 1 'Le lecteur à utiliser
                RawStuff.reg_ECX = &H49 Or &H800
                'Ejection du lecteur
                Call DeviceIoControl(hDrive, VWIN32_DIOC_DOS_IOCTL, RawStuff, LenB(RawStuff), RawStuff, LenB(RawStuff), DummyReturnedBytes, ByVal 0)
                Call CloseHandle(hDrive)  'Nettoyer après l'éjection
            End If
        End If
    End If
End Sub

Conclusion :


Vous pouvez ejecter / charger un CDROM sous Windows NT/2000/XP, mais je ne sais pas le faire sous Win 9x/ME. Si quelqu'un possède le code, je lui serais gré de me le communiquer.
Merci.

A voir également

Ajouter un commentaire

Commentaires

BERU80
Messages postés
19
Date d'inscription
lundi 27 juin 2005
Statut
Membre
Dernière intervention
7 octobre 2008
-
Merci avec ce code j'ai pu ré-ouvrir mon lecteur de cd
924726
Messages postés
1
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
14 juillet 2011
-
i want to share the file hiding vb.net program to this site can u please tell me how to upload codes to this site
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
'Example by Howard Henry Schlunder
http://www.mentalis.org/apilist/DeviceIoControl.shtml
Arkeur
Messages postés
9
Date d'inscription
vendredi 17 mai 2002
Statut
Membre
Dernière intervention
6 mars 2003
-
Un peu fastidieux ce code , surtout qu'avec un simple controle mmcontrole tu peux le faire sous n'importe quel OS... Mais bon, le fait d'utilisé les API j'aprécie bcp !! :-) je te met 7 !!! :-)

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.