2010-01-18 5 views
5

में पीओएस या कीबोर्ड होने के लिए छुपा इंटरफ़ेस निर्धारित करना मेरे पास कुछ बार कोड स्कैनर डिवाइस हैं जो विभिन्न यूएसबी इंटरफेस (COMM इम्यूलेशन, छुपा कीबोर्ड, छुपा पीओएस इत्यादि) को संभाल सकते हैं। समस्या यह है कि, जबकि मैं यह बता सकता है कि डिवाइस छुपा मोड में है या नहीं, मुझे यह निर्धारित करने में सक्षम होना चाहिए कि क्या यह छुपा कीबोर्ड या छुपा पीओएस है या नहीं।सी ++

Win32 C++ का उपयोग करके इसे निर्धारित करने का कोई तरीका है, अधिमानतः विंडोज़ हिड लाइब्रेरी (hidsdi.h) में निर्मित के साथ?

उत्तर

3

डिवाइस के लिए अद्वितीय GUID प्राप्त करने के लिए आप HidD_GetHidGuid का उपयोग कर सकते हैं। डिवाइस इंटरफ़ेस मार्गदर्शिका प्रत्येक डिवाइस/एप्लिकेशन सॉफ़्टवेयर विक्रेता, माइक्रोसॉफ्ट या तृतीय पक्ष द्वारा परिभाषित की जाती है जब वे फिट दिखाई देते हैं। कुछ मामलों में ग्रिड प्रकाशित होते हैं और सार्वजनिक ज्ञान होते हैं और मानक इंटरफेस होते हैं, कुछ मामलों में वे नहीं होते हैं।

आप माइक्रोसॉफ्ट से USBView utility का भी उपयोग कर सकते हैं जो आपको यूएसबी पेड़ ब्राउज़ करने देगा या आप रजिस्ट्री में देख सकते हैं और देख सकते हैं कि आप अपने डिवाइस के लिए GUID पा सकते हैं या नहीं। कॉन्फ़िगरेशन डेटा मौजूद नहीं है या यदि आपका डिवाइस इसका समर्थन करता है, तो आपको डिवाइस डिवाइस को निर्धारित करने के लिए अभी भी query डिवाइस डिवाइस निर्धारित करना होगा या यह सामान्य डिवाइस के अलावा खुद को प्रकट नहीं करता है।

दो प्रकार के GUID हैं: डिवाइस क्लास और डिवाइस इंटरफ़ेस। एक उपकरण केवल एक वर्ग का हिस्सा हो सकता है। दुर्भाग्यवश, डिवाइस क्लास और डिवाइस इंटरफेस GUID कभी-कभी समान होते हैं, इस प्रकार भ्रमित डेवलपर्स। विनएक्सपी डीडीके में, मानकों को कम भ्रमित करने वाले GUID की परिभाषा को आजमाने और बनाने के लिए बनाए गए थे।

भी देखें यह वीडियो पिछले तो सवाल: Use RegisterDeviceNotification() for ALL USB devices.

+0

यह काम कर सकता है, लेकिन क्या वहां GUID की एक सूची है? GUID का अर्थ अन्यथा मेरे लिए कुछ भी नहीं होगा। –

+0

संपादित करें [15 वर्ण] –

+0

डिवाइस पीआईडी ​​सक्रिय है जो यूएसबी केबल मोड के आधार पर मेरे बारकोड पाठकों पर बदलता है। एचटीएच –

1

यहाँ संभव HID GUIDs की एक सूची है: http://msdn.microsoft.com/en-us/library/ms791134.aspx और के रूप में रोबोटो सुझाव HidD_GetHidGuid का उपयोग

+0

ठीक है, अभी करीब है, लेकिन उस सूची में छिपाई के लिए केवल एक प्रविष्टि शामिल है, लेकिन मुझे छुपा पीओएस बनाम छुपा कीबोर्ड चाहिए। पीओएस द्वि-दिशात्मक है और कीबोर्ड एकजुट है, इसलिए वे निश्चित रूप से अलग हैं। शायद यह HidD_GetHidGuid के साथ निर्धारित नहीं किया जा सकता है? –

+0

पीओएस मोड और कीबोर्ड मोड में आपको कौन सी GUID मिलती है? एक ही है? –

+0

हां, यह वही है, और यहां सूचीबद्ध एक है: http://msdn.microsoft.com/en-us/library/bb663084.aspx जो कि सामान्य –

1

आप hid रिपोर्ट की जांच करने के लिए HidP_ कार्यों का उपयोग करने की आवश्यकता होगी क्षमताओं। पता लगाएं कि HIDPOS डिवाइस द्वारा कौन सी क्षमताओं (उपयोग) प्रस्तुत की जाती हैं, और जांचें कि क्या वे उपयोग HidD_GetPreparsedData(), HidP_GetCaps(), और फिर HidP_GetValueCaps (और/या .. बटन कैप्स, आदि) का उपयोग कर मौजूद हैं या नहीं। उदाहरण देखने के लिए एक अच्छी जगह Jan Axelson's page है। यदि उपयोग मौजूद हैं, तो आपको पीओएस डिवाइस मिल गया है। यदि नहीं, तो यह कुंजीपटल होना चाहिए (माना जाता है कि आपने डिवाइस की पुष्टि की है।)