Obtenir la liste des pépriphériques éjectables (les clés usb, disque durs usb...) et les éjecter...

Soyez le premier à donner votre avis sur cette source.

Vue 16 115 fois - Téléchargée 3 924 fois

Description

Ce code permet de lister les périphériques éjectables et de les éjecter...
Il permet aussi d'obtenir des informations sur ces périphériques et leurs enfants (par ex : les clés USB)...pour cela, il faut cliquer à droite sur la ligne du device...

Pour plus d'informations voir :
la Windows DDK sur msdn.microsoft.com rubrique Device Installation
les fonctions SetupDiXxx : Device Installation functions
les fonctions CM_Xxx : PnP Configuration Manager functions

Pour 9x/ME : la liste des périphériques éjectables est potentiellement incorrecte (beaucoup trop de périphériques) du fait d'erreur dans la prise en charge des capacités sous 9x/ME, les erreurs ne viennent pas du code...l'affichage est conforme au contenu du registre...je trouve ca curieux d'ailleurs mais bon...

Conclusion :


Le code est commenté. Il doit marcher sous 9x/ME/2000/XP. Testé sous 2000, 2003, XP, XP Pro et 98.
Ne fonctionne pas sous NT4 par manque support USB. Doit fonctionner sous Vista.

N'hésitez pas à commenter et à noter...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

yan35
Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

Bonsoir ShareVB,

Je te remercie de tes infos. Cependant depuis mon dernier message, j'ai pas mal décortiqué ton code et lu de la doc sur les API SetupDi et du coup j'en ai déduit que je ne pouvais pas distinguer les disque externes par ces API. En effet ils sont attachés à la classe Volume, celle dont tu me donnes le classGUID pour utilisation avec SetupDiGetClassDevs, ce qui permet d'aller + vite dans leur identification mais ne permet pas de savoir qu'ils sont USB, voire même FW. D'ailleurs dans ton code tu détectes bien les clés USB mais pas les disques externes. J'abandonne donc une partie de cette piste pour les détecter et m'oriente vers l'API DeviceIoControl pour détecter le type de bus du disque. (mais l'utilisateur doit être des droits sur le disque !).
Quoiqu'il en soit, Merci pour ton code et tes infos.
ShareVB
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
11
salut,

L'api SetupDiGetClassDevs permet de récupérer les devices selon une catégorie (premier paramètre) soit d'installation (les catégories du Device Manager : http://msdn.microsoft.com/en-us/library/ms791134.aspx) soit d'interface (des catégories plus générales : http://msdn.microsoft.com/en-us/library/bb663138.aspx).

Si tu veux récupérer tous les disques, il faut que tu appelles cette api, de la façon suivante :
SetupDiGetClassDevs({71a27cdd-812a-11d0-bec7-08002be2092f}, NULL, NULL, DIGCF_PRESENT)

ShareVB
yan35
Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

10/10 Merci
yan35
Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

Bonjour,
Je viens de découvrir ce code en cherchant comment identifier des disques externes USB afin d'orienter un traitement différent de l'API WriteFile pour ce type de disque dans un code. C'est super, j'y trouve ce qu'il me faut et je vais en prendre un bout et l'adapter à une classe que j'utilise en information sur disque et fichiers. Merci pour ce gros travail d'information.
Y aurait-il une ou d'autres constantes comme DIGCF_ALLCLASSES = &H4 pour cibler l'extraction et limiter le parcours de l'énumération obtenue ?
Merci
ShareVB
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
11
salut,

"mot de passe" de quoi ? tu peux détecter l'arrivée d'un nouveau périphérique en sous classant ta fenêtre principale et en captant le message WM_DEVICECHANGE et son wparam dbt_devicearrival, en promptant le mot de passe puis en déconnectant si mauvais mot de passe...mais bon, je suis pas sûr que ca marche à tous les coups...

ShareVB

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.