private void RegisterNotification(Guid guid) { DeviceBroadcastStructures.DEV_BROADCAST_DEVICEINTERFACE devIF = new DeviceBroadcastStructures.DEV_BROADCAST_DEVICEINTERFACE(); IntPtr devIFBuffer; // Set to HID GUID devIF.dbcc_size = Marshal.SizeOf(devIF); devIF.dbcc_devicetype = DeviceBroadcastStructures.DBT_DEVTYP_DEVICEINTERFACE; devIF.dbcc_reserved = 0; devIF.dbcc_classguid = guid; // Allocate a buffer for DLL call devIFBuffer = Marshal.AllocHGlobal(devIF.dbcc_size); // Copy devIF to buffer Marshal.StructureToPtr(devIF, devIFBuffer, true); // Register for HID device notifications m_hNotifyDevNode = DeviceBroadcastStructures.RegisterDeviceNotification((new WindowInteropHelper(_ParentWindow)).Handle, devIFBuffer, DeviceBroadcastStructures.DEVICE_NOTIFY_WINDOW_HANDLE); // Copy buffer to devIF Marshal.PtrToStructure(devIFBuffer, devIF); // Free buffer Marshal.FreeHGlobal(devIFBuffer); }
// Unregister HID device notification private void UnregisterNotification() { uint ret = DeviceBroadcastStructures.UnregisterDeviceNotification(m_hNotifyDevNode); }