Detection usb avec WM_DEVICECHANGE

hawk13120 Messages postés 10 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 10 mai 2005 - 10 mai 2005 à 11:58
xrog2004 Messages postés 1 Date d'inscription samedi 19 juin 2004 Statut Membre Dernière intervention 18 décembre 2006 - 18 déc. 2006 à 16:33
Salut a tous,
voila je debute en csharp et j'ai du mal a suivre tous ce que vous dite
en fait je souhaiterais creer un programme qui detecterai si j'ai branché un peripheriqueusb et qui a ce moment la pourrai commencer une copie de sauvegarde ou autre.
pour la copie des fichiers et tous le reste ca va, je devrai m'en sortir
mais le probleme est la detection du peripherique
j'ai vu ce topic mais en fait je comprend pas grand chose:
http://www.csharpfr.com/forum.v2.aspx?ID=436000

Je ne comprend comment fonctionne le lancement de la fonction WndProc
de plus WM_DEVICECHANGE n'est pas reconnu dans csharp il doit manquer quelque chose
mais pour savoir quoi ...

Alors si vous pouvez m'aider ca serai cool

Help Please

19 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mai 2005 à 12:14
Salut,

Comment ça le lancement de WndProc ?

Pour WM_DEVICECHANGE sa valeur est définie dans le fichier winuser.h du PlatformSDK (comme c'est indiqué en bas de la doc)
Pour utiliser cette valeur rajoute ceci dans ton code :
private const int WM_DEVICECHANGE = 0x0219;

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
hawk13120 Messages postés 10 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 10 mai 2005
10 mai 2005 à 12:29
merci pour ta reponse rapide,

En fait WndProc doit se lancer lorsque l'on branche un peripherique...

ou cette fonction est toujours a l'ecoute de n'importe quel detection...

j'ai un peu du mal a me situé par rapport au code j'espere que ca viendra.
0
hawk13120 Messages postés 10 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 10 mai 2005
10 mai 2005 à 12:34
en fait je crois que je vien de comprendre
mon probleme c'est que je doit capter le Message m que j'envoie a la fonction WndProc.

Mais comment avoir ce message...

Ai-je bien compris ???
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mai 2005 à 12:36
En fait WndProc existe déjà, elle effectue le traitement des messages reçu.
Ce que nous on fait c'est un override pour rajouter notre propre code de traitement avant de laisser la classe de base (Form) faire son propre traitement.
En gros là tu as "juste" à c/c le code dans ton form.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mai 2005 à 12:37
Euh non, tu n'envoie rien a WndProc, c'est elle qui va justement nous servir à traiter les messages WM_DEVICECHANGE.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
hawk13120 Messages postés 10 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 10 mai 2005
10 mai 2005 à 15:55
Ok merci
mais comment ce fait il qu'il m'execute plusieurs fois mon traitement ?

et comment pourrais-je maintenant recuperer la lettre de lecteur que le systeme d'exploitation lui a affecté ? Est ce que je dois utiliser m.WParam comme tu le dis dans le topic que j'ai precisé tout à l'heure ?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mai 2005 à 16:31
Oui tu dois te servir de wParam
Regarde la doc de WM_DEVICECHANGE, je pense que ce que tu cherches est du côté de DBT_DEVICEARRIVAL.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
hawk13120 Messages postés 10 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 10 mai 2005
10 mai 2005 à 17:21
ok

j'ai regarder MSDN on y trouve ca mais ca reste vague.


DBT_DEVICEARRIVAL veut dire que un media a été inseré mais comment je recupere les propriétés de ce media, je doit declarer une variable d'un type bien precis ou autre

le seul exemple de code n'est carrement pas clair pour moi en plus c'est pas du csharp.

je t'en suppli coq baisse pas les bras a m'expliquer

merci
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
10 mai 2005 à 19:21
Tu interceptes WM_DEVICECHANGE si WParam est egal a DBT_DEVICEARRIVAL alors LParam est un pointeur sur une structure DEV_BROADCAST_HDR si le membre DEV_BROADCAST_HDR.dbch_devicetype est egale a DBT_DEVTYP_VOLUME alors il s'agit de l'insertion d'un nouveau volume, il faut alors traiter WParam comme une structure DEV_BROADCAST_VOLUME et le membre DEV_BROADCAST_VOLUME.dbcv_unitmask contient la lettre du lecteur.


Tout ca c'est pour traiter le message WM_DEVICECHANGE dans WndProc mais si tu ne comprends pas les fichiers header du C ce sera trop difficile. De plus je pense que ce n'est pas la meilleur solution ni la plus simple en C#, regarde du cote des librairies usb.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mai 2005 à 19:42
Ah ?
Tu aurais des liens qui vont bien ? :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
hawk13120 Messages postés 10 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 10 mai 2005
10 mai 2005 à 20:04
ok merci je vais faire ca
et sinon quels liens....
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mai 2005 à 20:09
Pour l'éventuelle autre façon de procéder dont parle Lutinore.
Ca pourrait être interessant de creuser un peu le sujet.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
10 mai 2005 à 23:28
j'ai jamais utilise cette librairie mais vu son nom ca doit correspondre..
Je pense que ca ne remplace pas WM_DEVICECHANGE mais on doit pouvoir enumerer les devices presents.


The USB library for .NET


http://www.icsharpcode.net/OpenSource/SharpUSBLib


Win32

0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mai 2005 à 23:44
Enumerer oui, mais notre probleme (si j'ai bien saisi) est d'etre averti du branchement d'un nouvel appareil (entre autre) un peu à la manière event.
Hors avec ce genre de lib à part boucler sur la liste pour voir les changements je ne vois pas comment faire.
Bref, sujet à approfondir :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
11 mai 2005 à 01:27
Je parlais de librairies qui peuvent simplifier l'utilisation des peripheriques USB pas forcement qui remplace WM_DEVICECHANGE.. Je connais pas d'autres moyens, meme avec DirectInput on passe par WM_DEVICECHANGE..


To be continued...
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
11 mai 2005 à 08:49
Ah ok, je n'avais pas saisi ça dans le bon sens :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
11 mai 2005 à 11:50
WMI c'est bien aussi.

::|The S@ib|::
MVP C#.NET
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
6 mars 2006 à 16:12
0
xrog2004 Messages postés 1 Date d'inscription samedi 19 juin 2004 Statut Membre Dernière intervention 18 décembre 2006
18 déc. 2006 à 16:33
Bonjour,
J'aurais voulu savoir comment recuperer les valeurs de dbcv_.....
et ou peut on trouver des bon tutos sur le WMI, le c#
en vous remerciant d'avance.

xrog
0
Rejoignez-nous