2012-09-29 21 views
9

मैं गेमपैड हैंडलिंग के लिए डायरेक्ट इनपुट से रॉइन इनपुट में एक एप्लिकेशन स्विच कर रहा हूं, और मैं प्रत्येक गेमपैड के लिए एक मानव पठनीय विवरण प्रस्तुत करना चाहता हूं। आदर्श उपकरण उपकरण होगा जो डिवाइस मैनेजर में दिखाई देता है, लेकिन यूएसबी उत्पाद विवरण भी करेगा। किसी भी विधि को व्यवस्थापक अनुमति के बिना काम करना चाहिए।RawInput छिपा डिवाइस के लिए मानव पठनीय नाम कैसे प्राप्त करें?

अब तक मुझे एक set of clues मिला है: रजिस्ट्री में HKLM\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM के तहत एक टेक्स्ट फ़ील्ड प्रतीत होता है जो DirectInput द्वारा प्रदान किए गए नाम के समान है। यह सही नहीं है - मेरे पास एक गेमपैड है जो डिवाइस मैनेजर में अंग्रेजी में दिखाई देता है, लेकिन रजिस्ट्री में 氀 के रूप में सूचीबद्ध करता है।

क्या डिवाइस प्रबंधक विवरण में WM_INPUT द्वारा प्रदान किए गए हैंडल से प्राप्त करने का कोई तरीका है? HidD_GetProductString आशाजनक लग रहा है, लेकिन मुझे नहीं पता कि RawInput हैंडल से छुपा शीर्ष स्तर संग्रह संभाल कैसे प्राप्त करें।

संपादित करें:। मैं किसी उपकरण उदाहरण पथ (जैसे \\?\HID#VID_1267&PID_A001#8&1d630df6&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}, जानकारी मैं SetupAPI से की जरूरत को निकालने के लिए पर्याप्त हो सकता है जो मिल गया है किसी को भी पता है कि यह कैसे एक उदाहरण पथ दिया तक पहुँचने के लिए

उत्तर

2

मैं है।? एक ऐसी ही समस्या हो रही है और विश्वास है कि मैं एक संभावित समाधान मिल गया।

ऐसा लगता है कि आप ऐसा नाम है जो RawInput uiCommand पैरामीटर के तर्क के रूप में RIDI_DEVICENAME साथ GetRawInputDeviceInfo कॉल करने से प्रदान करता है के साथ CreateFile कॉल करना होगा। यह आप के साथ डिवाइस के लिए एक हैंडल दे देंगे जिसे आप HidD_GetProductString पर कॉल कर सकते हैं।

wchar_t DeviceName[126]; 
HANDLE HIDHandle = CreateFile(RawInputDeviceName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); 
if(HIDHandle) 
{ 
    BOOLEAN Result = HidD_GetProductString(HIDHandle, DeviceName, sizeof(wchar_t) * 126); 
    CloseHandle(HIDHandle); 
} 

हालांकि, ऐसा लगता है कि HidD_GetProductString अपने सिस्टम पर संलग्न उपकरणों के बहुमत पर विफल रहता है और केवल अपने यूएसबी कीबोर्ड और एक वेब कैमरा के लिए सफल होने के लिए लगता है। यह मेरे यूएसबी माउस के लिए सफल नहीं है। मैंने अभी तक यह नहीं खोजा है कि यह क्यों है, लेकिन शायद मेरी प्रगति आपको सहायता करेगी।