Ejecter et charger un media amovible comme un cd etc..

0/5 (4 avis)

Snippet vu 6 406 fois - Téléchargée 45 fois

Contenu du snippet

Ce code permet d'ejecter et de charger un disque dans un lecteur amovible comme un lecteur de CD ou ZIP.
Ce code n'est pas de moi... je l'ai testé sous XP
Commentaires en anglais desolé ;-)

Source / Exemple :


'A mettre dans un module
Option Explicit

'API functions
Public 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 Long) As Long
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

'API Constants
Const GENERIC_READ = &H80000000
Const FILE_FLAG_WRITE_THROUGH = &H80000000
Const GENERIC_WRITE = &H40000000
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2

Const CREATE_NEW = 1
Const CREATE_ALWAYS = 2
Const OPEN_EXISTING = 3
Const OPEN_ALWAYS = 4
Const TRUNCATE_EXISTING = 5

Const IOCTL_STORAGE_EJECT_MEDIA = 2967560
Const IOCTL_STORAGE_LOAD_MEDIA = 2967564

Public Function EjectDrive(driveLetter As String) As Boolean
  Dim hDisk As Long
  Dim dwRc As Long
  Dim sDisk As String
  
  'Generate a volume name
  sDisk = "\\.\" & UCase(Mid(driveLetter, 1, 1)) & ":"
  
  'We should get back a handle to the volume
  hDisk = CreateFile(sDisk, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or _
                     FILE_SHARE_WRITE, ByVal CLng(0), OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, _
                     ByVal CLng(0))
  
  If hDisk = -1 Then
    EjectDrive = False
    Exit Function
  End If
  
  'Clear any cache from the disk
  FlushFileBuffers (hDisk)
  
  'Control the device (in this case, eject it)
  If DeviceIoControl(hDisk, IOCTL_STORAGE_EJECT_MEDIA, _
                     ByVal CLng(0), 0, ByVal CLng(0), 0, _
                     dwRc, ByVal CLng(0)) = 0 Then
    EjectDrive = False
  Else
    EjectDrive = True
  End If
  
  'Always close your handles!
  CloseHandle (hDisk)
  
End Function

Public Function LoadDrive(driveLetter As String) As Boolean
  Dim hDisk As Long
  Dim dwRc As Long
  Dim sDisk As String
  
  'Generate a volume name
  sDisk = "\\.\" & UCase(Mid(driveLetter, 1, 1)) & ":"
  
  'We should get back a handle to the volume
  hDisk = CreateFile(sDisk, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or _
                     FILE_SHARE_WRITE, ByVal CLng(0), OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, _
                     ByVal CLng(0))
  
  If hDisk = -1 Then
    LoadDrive = False
    Exit Function
  End If
  
  'Clear any cache from the disk
  FlushFileBuffers (hDisk)
  
  'Control the device (in this case, eject it)
  If DeviceIoControl(hDisk, IOCTL_STORAGE_LOAD_MEDIA, _
                     ByVal CLng(0), 0, ByVal CLng(0), 0, _
                     dwRc, ByVal CLng(0)) = 0 Then
    LoadDrive = False
  Else
    LoadDrive = True
  End If
  
  'Always close your handles!
  CloseHandle (hDisk)
  
End Function

Conclusion :


n'hesitez pas à commenter... je sais pas si ca marche sur les autres Win

A voir également

Ajouter un commentaire Commentaires
ShareVB
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
31 mai 2005 à 22:10
salut,

si tu n'as pas l'option dans Windows, c'est que tu ne peux pas le faire : le lecteur ne le supporte pas...

ShareVB
RV57000
Messages postés
10
Date d'inscription
mardi 18 mai 2004
Statut
Membre
Dernière intervention
27 janvier 2006

31 mai 2005 à 19:16
Normalement lorsque tu as 1 lecteur zip, si tu vas dans l'explorateur bouton droit sur le lecteur zip tu trouve la fonction ejecter et si tu clic dessus, t'on zip est éjecté.
En fait au lieu que ce soit le cd qui sorte là c'est le zip.
Mais je n'arrive pas à accéder à cette fonction.
Merci quand même.
ShareVB
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
30 mai 2005 à 20:08
salut,

désolé mais moi je n'ai plus de lecteur ZIP...es-tu sûr que le lecteur permet de le faire...tous les lecteurs ne l'acceptent pas...

ShareVB
RV57000
Messages postés
10
Date d'inscription
mardi 18 mai 2004
Statut
Membre
Dernière intervention
27 janvier 2006

30 mai 2005 à 19:50
Salut ...
le code si dessus est bien mais je n'arrive pas à faire éjecter un disque ZIP...
pour le lecteur CD pas de problème ...
si toute fois on pouvais m'expliquer comment ejecter un zip (ça m'interresse).

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.