2009-04-01 18 views
7

Şu anda bir Windows Hizmetinde (C++ ile yazılmış) bağlı USB HID aygıtlarının bildirimlerini kuran bir kod var.TÜM USB aygıtları için RegisterDeviceNotification() kullanın

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); 

bir bildirim sonra SERVICE_CONTROL_DEVICEEVENT olayı ile alındığında aşağıdaki gibidir: kodudur. (Unutmayın, bu bir Servis bu yüzden WM_DEVICECHANGE).

Sadece dbcc_classguid'i geçersiz kılacak ve tüm aygıtları alabilmesi için RegisterDeviceNotification() çağrısında DEV_BROADCAST_DEVICEINTERFACE bayrağını belirtebileceğimi düşündüm, ancak bu bayrak Windows 2000'de desteklenmiyor, ki bu benim için bir anlaşmazlık. Ayrıca, bunun sadece USB cihazlarından daha fazla geri döneceğini tahmin ediyorum.

Sadece USB HID değil, tüm USB aygıtlarını almak için bunu nasıl değiştirmeliyim? Farklı bir GUID vermek kadar basit mi olmalı? Tüm USB için bir GUID var mı?

cevap

5

kullanılmış GUID_DEVINTERFACE_USB_DEVICE tüm USB cihazları için izlemek için.

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); 
İlgili konular