Question

J'écris un logiciel qui se connecte automatiquement un périphérique Bluetooth à l'aide de Windows API Bluetooth . Quand il se connecte, Windows démarre automatiquement l'installation du pilote de périphérique HID Bluetooth, comme prévu:

Installation des pilotes Bluetooth HID

Cela prend environ 10-15 secondes, après quoi Windows affiche le familar message "prêt à l'emploi":

matériel installé et prêt à l'emploi

Le problème est que BluetoothSetServiceState() retourne dès que l'installation du pilote commence , pas quand l'appareil est en fait prêt à l'emploi. Cela provoque des problèmes pour mon code, car il invoque une bibliothèque distincte pour la communication de l'appareil dès qu'il est « connecté ». Les premiers appels échouent parce que les pilotes n'ont pas fini d'installer et de faire les tentatives de connexion semble interférer avec l'installation du pilote, parce que si je tente d'utiliser la bibliothèque de communication avant l'installation du pilote a terminé de Windows veut redémarrer avant que l'appareil peut être utilisé.

Ce que je suis à la recherche est un moyen de crochet « prêt à l'emploi » événement, lors de l'installation du pilote a effectivement terminé, donc je ne fais pas mes appels à la bibliothèque de communication prématurément. Est-il un appel API Windows que je peux utiliser soit enregistrer un rappel de fonction ou directement polling l'état de l'installation du pilote?

J'écris ceci dans la vanille C / C ++, .NET pas. Merci pour votre aide!

Était-ce utile?

La solution

Vous pouvez jeter un oeil à cet exemple de code et RegisterDeviceNotification fonction . Je ne suis pas sûr de 100%, mais il semble fonctionner si vous spécifiez guid correct pour votre classe de périphérique.

Autres conseils

Voici ce que je ferais:

  1. Télécharger Winspector (ou utiliser Spy ++)
  2. Démarrer Winspector et commencer à regarder pour les messages de fenêtre
  3. Installez le pilote
  4. Surveillez l'indicatif de WM d'une installation pilote terminée

Je voudrais être plus descriptif sur # 4, mais je ne suis pas familier avec le message de fenêtre spécifique dont vous avez besoin. Jetez un coup d'oeil ici pour les messages possibles de la fenêtre d'attendre .

Cependant, une fois que vous déterminez le message de fenêtre correcte pour rechercher, puis ont votre programme programme d'attendre (et gérer) cette WM. CodeProject a une excellente écriture sur la façon de le faire en C ++ . Personnellement, Je préfère le faire dans Delphi .

S'il est un réseau de liaison puis RNDIS envoie un message quand il a terminé l'installation comme par RNDIS

ou

Vous pouvez installer ou interroger la liste des périphériques par l'utilitaire programatically Devcon (code source est disponible avec MSDN) comme indiqué dans Exemples

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top