notification d'insertion et éjection de clés usb [windows win32] - C - Programmation
Marsh Posté le 15-04-2005 à 15:10:15
Regarde voir WM_DEVICECHANGE
http://msdn.microsoft.com/library/ [...] emoval.asp
Marsh Posté le 15-04-2005 à 15:20:42
merci c est sympa, je vais regarder ca
J'ai trouvé quelque chose pour forcer l'éjection dans la MSDN :
|
avec du code permettant d ejecter un périphérique amovible, mais j'ai essayé d utiliser ce code et ca n ejecte pas du tout mon disque. Peut etre parcequ'il s'agit de vieux code prévu pour windows NT et que la procédure sous windows XP est différente ? je vais regarder un peu plus en détail.
Marsh Posté le 15-04-2005 à 16:43:17
Je crois que l'éjection c'est pour des trucs genre les lecteurs Zip qui physiquement éjectent un disque.
Toi tu veux déconnecter un périph USB. A priori, je regarderais plutôt du côté de la Setup API.
http://msdn.microsoft.com/library/ [...] gement.asp
y'a peut etre plus direct, mais si le code que tu cites ne marche pas, je vois rien d'autre.
Marsh Posté le 19-04-2005 à 10:20:05
effectivement ca doit etre ca, d'ailleurs quand on fait a partir de l'explorateur windows "bouton droit -> ejecter" sur une clé usb, ca ne marche pas (ca fait rien). Il faut ejecter le périphérique en passant par l'icone en bas a droite.
Je pense donc que la portion de code que j'ai ne fonctionnera pas sur les clés usb
Par contre je n'ai pas trouvé grand chose qui puisse m'aider dans le lien que tu m'as passé. Je te remercie quand meme pour tes réponses
Marsh Posté le 19-04-2005 à 11:18:00
en cherchant un peu plus, j'ai trouvé une partie de code qui peut etre interessante :
Code :
|
Apparemment, il est possible d'ejecter un periphérique en passant par la Setup API comme tu me l'as proposé.
Il me reste donc à trouver le moyen de faire la correspondance entre mon lecteur ('F:' par exemple) et le périphérique associé, et également savoir si un périphérique est éjectable ou non.
Marsh Posté le 19-04-2005 à 11:36:57
Voir GetDriveType() / GetVolumeNameForVolumeMountPoint().
T'es sûr que FSCTL_DISMOUNT_VOLUME ça marche pas ?
Marsh Posté le 19-04-2005 à 14:29:18
j'ai intercepté le message WM_DEVICECHANGE et mis un point d arret dessus.
Lorsque je fais appel a FCNTL_DISMOUNT_VOLUME, je n'atteins pas le point d'arret, et d'ailleurs mon disque est tjrs accessible a partir de l'explorateur (comme si ca n'avait rien fait en fait).
Par contre, si je deconnecte le périphérique en passant par l'icone de gestion de périphériques, j'intercepte bien le message WM_DEVICECHANGE.
Je pense donc qu'il faut que j'utilise la partie de code que j'ai postée.
Le gros problème est que je viens de m'apercevoir qu'il faut le DDK pour utiliser ces fonctions et je ne l'ai pas (et il est payant ). J'ai juste le DDK pour NT4 (je suis sous windows XP) , et apparemment ca ne fonctionne pas avec.
Marsh Posté le 15-04-2005 à 15:02:41
Salut,
je travaille sur un outil de duplication de divers périphériques amovibles se branchant sur le port usb (clé usb, divers cartes mémoire et autre), et je cherche à savoir comment forcer l'ejection d'un périphérique (sans avoir a passer par l'icone ejecter dans la barre des taches), et egalement je cherche à récuperer les événements ou messages windows me signalant l'insertion/la suppression d'un support amovible pour mettre à jour automatiquement ma liste (sans avoir à mettre un bouton rafraichir).
J'ai cherché dans la documentation MSDN de microsoft, mais celle ci est assez mal documentée et je n'ai pas trouvé d'informations utiles à ce sujet.
Merci d'avance