begin process at 2012 02 12 04:23:28
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Périphériques

 > EJECTER UN CD EN FONCTION DE LA LETTRE DU LECTEUR

EJECTER UN CD EN FONCTION DE LA LETTRE DU LECTEUR


 Information sur la source

Note :
9,5 / 10 - par 4 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Périphériques Classé sous :éjecter, cd, lecteur Niveau :Expert Date de création :14/02/2002 Date de mise à jour :14/02/2002 13:22:10 Vu :9 338

Auteur : lolo32

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

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

  • ' 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
' 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.  


 Sources du même auteur

Source avec Zip Source avec une capture CRYPTAGE / DECRYPTAGE EN RC4
ATTIBUER UNE SÉQUENCE DE TOUCHE À UN PROG

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) LIRE ET CHANGER LA LUMINOSITÉ DES ÉCRANS LCD (DE PORTABLE) C... par ShareVB
Source avec Zip Source avec une capture VISUAL BASIC ET MICROPROCESSEUR MBED par ccllee
Source avec Zip Source avec une capture Source .NET (Dotnet) VARIATEUR SECTEUR 11 VOIES SUR PORT SERIE OU USB par mays
Source avec Zip Source avec une capture PILOTER LES PORTS PARALLELES. par djebbipgm
Source avec Zip PILOTER LES PORT COMM DE PC par djebbipgm

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LECTEUR ENREGISTREUR GRAVEUR par cednoir
VBS - DETECTER, OUVRIR, FERMER LES LECTEURS DE CD par Zlub
Source avec Zip Source avec une capture EJECTER FERMER CD EN 1 CLIC - C'EST UN GADGET par Philippe734
Source avec Zip LECTEUR DE CD AUDIO par youpiiie
Source avec Zip Source avec une capture POUR OUVRIRE OU FERMER LE LECTEUR CD par OverDarck

Commentaires et avis

Commentaire de Arkeur le 20/05/2002 15:00:09

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 !!! :-)

Commentaire de Renfield le 06/01/2006 16:59:14 administrateur CS

'Example by Howard Henry Schlunder
http://www.mentalis.org/apilist/DeviceIoControl.shtml

Commentaire de 924726 le 14/07/2011 16:08:04

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

Commentaire de BERU80 le 03/12/2011 19:49:47 8/10

Merci avec ce code j'ai pu ré-ouvrir mon lecteur de cd

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

éjecter les lecteur des que je rentre un cd ou un dvd [ par cool59 ] bonjour a tous j'ai une question j'ai des cd et je voudrai savoir comment faire pour que le cd a l'insertion ressort automatiquement merci a vous tous éjecter un lecteur cd à partir d'un programme [ par mat85fcna ] J'aimerai bien avoir la ligne de code permettant d'ejecter un lecteur cd, svp c pour l'&#233;cole Ouvrir un lecteur cd sous VB.net [ par poulain ] Sous VB.net,quelle est le code qui permet d'ouvrir le lecteur CD? Et, si on en a plusieur, d'en ouvrir qu'un, sans pr&#233;ciser la lettre du lecteur? Ouvrir un lecteur CD sous VB.net [ par poulain ] Salut! J'me suis amus&#233; a faire un p'tit prog tout simple, j'suis dasn mes tout debuts, mais je ne connais pas le code pour faire ouvrir le lecteu au secours DOS [ par joflo ] bonjour a tousj'essaie de faire un CD bootableMAIS je veux que l'autoexec.bat reconnaisse la lettre du lecteur de cd en cherchant successivement un fi connaitre la lettre du lecteur CD ROM [ par youkizouki ] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; savoir si un CD est dans le lecteur CDROM ? [ par youkizouki ] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lecteur CD [ par mourad183 ] comment faire pour savoit la lettre d'un lecteur CD??? (E, F,...) Lecteur de cd rom et DVD [ par TomIlliev ] Bonjour à tous!Voilà, je voudrai savoir s'il existe une API qui permette de calculer la place disponnible sur un CD ou DVD et qui permettre de dire si prob winsock [ par zeboss ] bonjour, je suis en train de d&#233;velopper 2 appli qui marchent avec Winsock. Dans l'appli 1 (par exemple), je dis &#224; l'appli 2 d'ouvrir son lec


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,103 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales