Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1026 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [windows win32] notification d'insertion et éjection de clés usb

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[windows win32] notification d'insertion et éjection de clés usb

n°1048743
xilebo
noone
Posté le 15-04-2005 à 15:02:41  profilanswer
 

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

mood
Publicité
Posté le 15-04-2005 à 15:02:41  profilanswer
 

n°1048758
HelloWorld
Salut tout le monde!
Posté le 15-04-2005 à 15:10:15  profilanswer
 
n°1048781
xilebo
noone
Posté le 15-04-2005 à 15:20:42  profilanswer
 

merci c est sympa, je vais regarder ca :)
 
 
J'ai trouvé quelque chose pour forcer l'éjection dans la MSDN :  


HOWTO: Ejecting Removable Media in Windows NT
Last reviewed: March 25, 1997
Article ID: Q165721  


 
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.

n°1048878
HelloWorld
Salut tout le monde!
Posté le 15-04-2005 à 16:43:17  profilanswer
 

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.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1051836
xilebo
noone
Posté le 19-04-2005 à 10:20:05  profilanswer
 

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

n°1051934
xilebo
noone
Posté le 19-04-2005 à 11:18:00  profilanswer
 

en cherchant un peu plus, j'ai trouvé une partie de code qui peut etre interessante :
 

Code :
  1. #include <windows.h>
  2. #include <SetupAPI.h>
  3. #include <cfgmgr32.h>
  4. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
  5. {
  6. int res = 0;
  7. char buffer[20];
  8. char* hid = "USB\\Vid_05e3&Pid_0702\\5&2cab1e4d&0&1";
  9. HMACHINE hMachine = NULL;
  10. DEVINST dnDevInst = NULL;
  11. PDEVINST pdnDevInst_OUT = &dnDevInst;
  12. res = CM_Locate_DevNode_Ex(pdnDevInst_OUT, hid, CM_LOCATE_DEVNODE_NORMAL, hMachine);
  13. _itoa(res, buffer, 10);
  14. //MessageBox(NULL, buffer, "msg", 0);
  15. res = CM_Request_Device_Eject_Ex(dnDevInst, NULL, NULL, 0, 0, hMachine );
  16. _itoa(res, buffer, 10);
  17. //MessageBox(NULL, buffer, "msg", 0);
  18. return 0;
  19. }


 
 
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.  
 

n°1051963
HelloWorld
Salut tout le monde!
Posté le 19-04-2005 à 11:36:57  profilanswer
 

Voir GetDriveType() / GetVolumeNameForVolumeMountPoint().
T'es sûr que FSCTL_DISMOUNT_VOLUME ça marche pas ?


Message édité par HelloWorld le 19-04-2005 à 11:38:33

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1052225
xilebo
noone
Posté le 19-04-2005 à 14:29:18  profilanswer
 

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  :cry: ). J'ai juste le DDK pour NT4 (je suis sous windows XP) , et apparemment ca ne fonctionne pas avec.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [windows win32] notification d'insertion et éjection de clés usb

 

Sujets relatifs
Insertion de données mySQL vers ExcelProbleme de librairie windows/linux
Formulaire, problème insertion de donnéesgnuplot pour windows?
VBA Outlook : Création mail et insertion signaturecherche fonction pour lire&modifier la résolution d'écran sous windows
Insertion d'une image postrcipt dans un doc postscriptContrôle/fonctions Windows utilisant la base de données TZ
Tri par insertion -> Adaptation pour chaine de carconfiguration port parallele sous windows xp
Plus de sujets relatifs à : [windows win32] notification d'insertion et éjection de clés usb


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR