Handle device removal/addition

This commit is contained in:
2021-12-20 16:21:01 -05:00
parent 287c008117
commit 312c4c5c06
6 changed files with 74 additions and 16 deletions

52
UsbService.cs Normal file
View File

@@ -0,0 +1,52 @@
using System;
using System.Windows.Forms;
namespace WorkIndicator
{
internal class UsbService : NativeWindow, IDisposable
{
public event Action DevicesChanged;
private const int WM_DEVICECHANGE = 0x0219;
private const int DBT_DEVICEARRIVAL = 0x8000;
private const int DBT_DEVICEREMOVECOMPLETE = 0x8004;
private const int DBT_DEVNODES_CHANGED = 0x0007;
private bool _isDisposed;
internal UsbService()
{
base.CreateHandle(new CreateParams());
}
protected override void WndProc(ref Message msg)
{
base.WndProc(ref msg);
if (msg.Msg == WM_DEVICECHANGE)
{
switch (msg.WParam.ToInt32())
{
case DBT_DEVNODES_CHANGED:
case DBT_DEVICEARRIVAL:
case DBT_DEVICEREMOVECOMPLETE:
DevicesChanged?.Invoke();
break;
}
}
}
public void Dispose()
{
if (!_isDisposed)
{
base.DestroyHandle();
_isDisposed = true;
GC.SuppressFinalize(this);
}
}
}
}