Windows消息事實就是一個數值。
private const int WM_DEVICECHANGE = 0x219; //設備改變
private const int DBT_DEVICEARRIVAL = 0x8000; //檢測到新設備
private const int DBT_DEVICEREMOVECOMPLETE = 0x8004; //移除設備
private const int DBT_DEVTYP_VOLUME = 0x00000002; //邏輯卷標
const int DBT_CONFIGCHANGECANCELED = 0x0019; //配置改變取消
const int DBT_CONFIGCHANGED = 0x0018; //配置改變
const int DBT_CUSTOMEVENT = 0x8006;
const int DBT_DEVICEQUERYREMOVE = 0x8001;
const int DBT_DEVICEREMOVEPENDING = 0x8003;
const int DBT_DEVICETYPESPECIFIC = 0x8005;
const int DBT_DEVNODES_CHANGED = 0x0007;
const int DBT_QUERYCHANGECONFIG = 0x0017;
const int DBT_USERDEFINED = 0xFFFF;
[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_VOLUME
{
public int dbcv_size;
public int dbcv_devicetype;
public int dbcv_reserved;
public int dbcv_unitmask;
}
Wndproc是Windows操作系統嚮應用程序發送一系列消息之一,每個窗口會有一個窗口過程的回調函數,分別是窗口句柄、消息ID、WPARAM、LPARAM。
重寫WndProc函數,對不同消息事件進行處理
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch (m.Msg)
{
case WM_DEVICECHANGE:
switch ((int) m.WParam)
{
case DBT_DEVICEARRIVAL:
Console.WriteLine("新設備");
int devType = Marshal.ReadInt32(m.LParam, 4);
Console.WriteLine($"設備類型{devType}");
if (devType == DBT_DEVTYP_VOLUME)
{
Console.WriteLine("新設備");
}
break;
case DBT_DEVICEREMOVECOMPLETE:
Console.WriteLine("設備移除");
break;
}
break;
}
}