2010-08-04 20 views
0

Je suis désolé si cela est similaire à une question précédente, mais c'est quelque chose que je viens de remarquer. Je peux détecter quand mon appareil est connecté au système (via USB) et piéger le message correctement mais si je débranche et rebranche l'appareil, tenter d'accéder au périphérique via la fonction CreateFile() renvoie toujours une erreur: ERROR_GEN_FAILURE 31 (0x1F) qui se traduit par - Un périphérique connecté au système ne fonctionne pas, c'est cependant tenté après recieving le message DBT_DEVICEARRIVAL qui, par microsoft's propre définition dit "Un dispositif ou un morceau de médias a été inséré et est maintenant disponible ". Je crois que ce qui se passe ici est que l'erreur est plus liée au fait que l'appareil n'est pas prêt, même s'il est signalé comme étant prêt, car si je liste de nouveau la liste des appareils sur le système, l'appareil est prêt. Quelqu'un d'autre a-t-il rencontré et dépassé ce problème? Ou y a-t-il quelque chose qui me manque/qui me manque?Comment détecter lorsqu'un périphérique connecté au système est prêt à être utilisé?

+0

Vous voudrez peut-être donner une idée de ce que OS vous parlent de - cela ressemble à une version de Windows, mais qui sait? (Astuce: les balises sont utiles ici) –

+0

Je suis sur Windows 7 32 bits –

+1

Est-ce que cela fonctionne comme prévu si vous * ne * débranchez pas et ne vous reconnectez pas? Il semble que vous essayez de travailler avec l'ancienne référence, alors que vous en avez vraiment besoin à chaque fois que l'appareil est rattaché. – Jay

Répondre

0

La manière la plus simple de traiter cela, IMO, est via WMI.

Voir ici: http://dotnetslackers.com/community/blogs/basharkokash/archive/2008/02/06/usb-port-insert-remove-detection-using-wmi.aspx

Je l'ai utilisé WMI dans le passé pour la détection de clé USB et il est mort simple et le rappel rend les choses assez propre

+0

Excuses je ne sais rien de WMI –

+0

Ouais, je ne l'ai pas non plus la première fois je l'ai fatigué. Cependant, jetez un oeil à l'article que j'ai posté. C'est simple. –

+0

Désolé, mais cette réponse n'est pas vraie. L'événement décrit indique seulement qu'un périphérique est connecté au système et peut-être que certaines informations peuvent être récupérées à partir du périphérique. Mais la question était "quand il est prêt à utiliser". Dans mon optinion cela inclut que le pilote a été démarré avec succès, de sorte que je suis capable d'utiliser l'appareil. Mais l'événement WMI n'inclut pas cela. E.g: J'ai attaché un périphérique FTDI et utiliser WMI pour détecter quand il était attaché. Cela dure environ 5 secondes entre le déclenchement de l'événement WMI et le moment où je suis en mesure d'ouvrir l'appareil. – 0xBADF00D