private void RegisterNotification(Guid guid) { Dbt.DEV_BROADCAST_DEVICEINTERFACE devIF = new Dbt.DEV_BROADCAST_DEVICEINTERFACE(); IntPtr devIFBuffer; // Set to HID GUID devIF.dbcc_size = Marshal.SizeOf(devIF); devIF.dbcc_devicetype = Dbt.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 = Dbt.RegisterDeviceNotification((new WindowInteropHelper(this)).Handle, devIFBuffer, Dbt.DEVICE_NOTIFY_WINDOW_HANDLE); // Copy buffer to devIF Marshal.PtrToStructure(devIFBuffer, devIF); // Free buffer Marshal.FreeHGlobal(devIFBuffer); }
private void RegisterNotification() { Dbt.DEV_BROADCAST_DEVICEINTERFACE dev_broadcast_deviceinterface; Guid hidGuid = new Guid(); Hid.GetHidGuid(ref hidGuid); dev_broadcast_deviceinterface = new Dbt.DEV_BROADCAST_DEVICEINTERFACE { dbcc_devicetype = 5, dbcc_reserved = 0, dbcc_classguid = hidGuid }; dev_broadcast_deviceinterface.dbcc_size = Marshal.SizeOf(dev_broadcast_deviceinterface); IntPtr ptr = Marshal.AllocHGlobal(dev_broadcast_deviceinterface.dbcc_size); Marshal.StructureToPtr(dev_broadcast_deviceinterface, ptr, true); m_hNotifyDevNode = Dbt.RegisterDeviceNotification(base.Handle, ptr, 0); Marshal.PtrToStructure(ptr, dev_broadcast_deviceinterface); Marshal.FreeHGlobal(ptr); }