J'utilise actuellement WM_Devicechange pour être notifié lorsque de nouveaux lecteurs USB sont connectés à l'ordinateur. Cela fonctionne parfaitement pour des appareils tels que les conduites de pouce où dès que l'arrivée de l'appareil est prête à avoir des fichiers. Pour les périphériques tels que les lecteurs de carte SD, il n'est pas parce que le message est envoyé une fois lorsque l'appareil est connecté, mais aucun message n'est envoyé lorsqu'un utilisateur insère réellement une carte dans l'appareil. P>
est-il possible de détecter l'insertion de nouveaux médias dans un périphérique USB existant sans avoir à utiliser le sondage? p>
4 Réponses :
pourrait être un bug dans le pilote de lecteur SD. La description de WM_Devicechange est "DBT_DeviceRivall 0x8000 A Le périphérique ou la pièce de support a été inséré et est maintenant disponible. " P>
Par conséquent, vous êtes censé obtenir une notification pour l'insertion des médias. P>
Avez-vous essayé d'utiliser registerDevicénotification ? Seule certaines notifications sont envoyées par défaut et le changement de média pourrait ne pas être l'un d'entre eux. P>
Comme cela se produit, de nouvelles notifications de volume sont envoyées par défaut.
À droite, mais la lettre de lecteur (volume) est attribuée lorsqu'un lecteur de carte est inséré. La notification de changement de support peut nécessiter une inscriptionDevicénotification.
Je viens de le faire il y a quelques semaines. Techniquement parlant, la voie de l'enregistrementDevicénotification est la bonne voie à suivre, mais elle nécessite une quantité décente de travail. Cependant, Windows Explorer effectue déjà tout le travail difficile pour vous. Il suffit d'utiliser SHCHANGENOTIFYregister avec shcne_driveadd / shcne_driveremoved / shcne_mediAinserted / shcne_mediaremoved. Notez que cette méthode dépend du service de détection du matériel Shell (ou de ce qu'on appelle), mais il est beaucoup plus facile que d'essayer de ré-implémenter la fonctionnalité vous-même. P>
Bon appel. La bibliothèque qui met en œuvre qui est présente sur chaque système. Mais le paramètre DisableAutorUndriveType Registry affecte-t-il cela?
Je n'ai pas testé cela, mais je ne penserais pas que les deux sont connectés. Ce mécanisme est utilisé par "Supprimer le matériel en toute sécurité"; Même si Autorun est désactivé, cette application de plateau doit toujours recevoir des notifications d'arrivée / de suppression.
Le message SHCNE_MEDIAINISERTED est envoyé même si le paramètre de registre DriveTypeAutorUnUn est défini pour désactiver tous les périphériques.
C'est peut-être un bogue dans les pilotes de périphérique (je pense certainement que c'est), mais ils semblent tous travailler de la même manière ... non. Ainsi, à ce stade, je ne pense pas que vous puissiez obtenir un pilote de périphérique Devlopers de modifier les caractéristiques de leurs appareils, même si Microsoft (probablement le plus grand développeur) vous conduit à croire qu'il devrait fonctionner de cette façon (ne fonctionne pas pour mon Windows 7 Microsoft Driver). L'insertion d'une carte SD dans un périphérique USB ne déclenche tout simplement pas un message WM_Devicechange. P>
Utilisez SHCHANGENOTIFYregister pour les périphériques de type multimédia. Il ne nécessite pas de déviancotification de registre. Et vous pouvez obtenir la lettre de lecteur via shgetpathfromidlist. Utiliser shcne_mediainserted et shcne_mediaremoved. P>
Utiliser le périphérique OnDevicénotify Si vous recherchez un périphérique matériel plutôt qu'un périphérique multimédia, ou vous pourrez peut-être écrire un pilote de périphérique à votre propre. P>
Voir ce code de commentaire CodeProject - fenêtres Piégeage messages a> p>
Il y a un très bon exemple de l'utilisation de http://msdn.microsoft.com/en-us/ Bibliothèque / DD940348.ASPX # Téléchargement P>
J'ai implémenté SHCHANGENOTINYregister dans mon code QT. P>
Merci à Luke pour sa très bonne réponse! p> SHCHANGENOTINYregister code> dans "Modifier l'échantillon de surveillance de l'observateur".
Téléchargez-le à partir de cette adresse: p>
Je suis jolie nouveau - quand il s'agit de mélanger et de mettre en œuvre le code Windows (trucs comme SHCHANGENOTIFYregister) avec code QT. Pouvez-vous me donner quelques conseils comment procéder avec cela ?? Toute aide est appréciée !!
Vérifiez cette question Stackoverflow.com/Questtions/583593/...
@Kirill: Il y a une bonne raison pour laquelle la question n'a aucune réponse acceptée. Ils ne parviennent pas à distinguer entre "nouveau lecteur" et "insertion de volume dans le lecteur existant".