2009-04-01 7 views
7

मेरे पास वर्तमान में कुछ कोड है जो विंडोज सेवा (सी ++ में लिखे गए) के भीतर जुड़े यूएसबी एचआईडी उपकरणों की अधिसूचनाएं सेट करता है। कोड निम्नानुसार है:सभी यूएसबी उपकरणों के लिए RegisterDeviceNotification() का उपयोग करें

GUID hidGuid; 
    HidD_GetHidGuid(&hidGuid); 

    DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; 
    ZeroMemory(&NotificationFilter, sizeof(NotificationFilter)); 
    NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); 
    NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; 
    NotificationFilter.dbcc_classguid = hidGuid; 
    HDEVNOTIFY deviceNotify = RegisterDeviceNotification(StatusHandle, &NotificationFilter, DEVICE_NOTIFY_SERVICE_HANDLE); 

तब SERVICE_CONTROL_DEVICEEVENT ईवेंट के माध्यम से एक सूचना प्राप्त की जाती है। (याद रखें, यह एक सेवा है इसलिए कोई WM_DEVICECHANGE नहीं)।

मैंने सोचा कि मैं केवल RegisterDeviceNotification() कॉल में DEV_BROADCAST_DEVICEINTERFACE ध्वज निर्दिष्ट कर सकता हूं, इसलिए यह dbcc_classguid को ओवरराइड करेगा और सभी डिवाइस प्राप्त करेगा, लेकिन यह पता चला है कि वह ध्वज Windows 2000 पर समर्थित नहीं है, जो मेरे लिए एक डीलरब्रेकर है। साथ ही, मुझे लगता है कि यह सिर्फ यूएसबी उपकरणों से अधिक वापस आ जाएगा।

सभी यूएसबी डिवाइस प्राप्त करने के लिए इसे कैसे संशोधित करना चाहिए, न केवल यूएसबी छिपाई? क्या यह एक अलग GUID देने के रूप में सरल होना चाहिए? क्या सभी यूएसबी के लिए भी एक GUID है?

उत्तर

5

प्रयुक्त GUID_DEVINTERFACE_USB_DEVICE ("usbiodef.h" में): यह बनाम इंटरफ़ेस GUIDs के बारे में डिवाइस GUIDs है -

इसके अलावा, मैं निम्न आलेख उपयोगी पाया।

DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; 
    ZeroMemory(&NotificationFilter, sizeof(NotificationFilter)); 

    NotificationFilter.dbcc_size = sizeof(NotificationFilter); 
    NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; 
    NotificationFilter.dbcc_reserved = 0; 

    NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE; 

    HDEVNOTIFY hDevNotify = RegisterDeviceNotification(hwnd, &NotificationFilter, DEVICE_NOTIFY_SERVICE_HANDLE); 
5

क्या आपने GUID_DEVCLASS_USB को आजमाया है? (devguid.h में परिभाषित, विंडोज एसडीके)

क्या आपका मतलब DEVICE_NOTIFY_ALL_INTERFACE_CLASSES ध्वज था? सभी USB उपकरणों के लिए देखने के लिए

http://blogs.msdn.com/doronh/archive/2006/02/15/532679.aspx

संबंधित मुद्दे

 संबंधित मुद्दे