0

我如何知道设备在 WPF 中是插入还是拔出?

我正在使用下面的代码来检测设备更改:

   private void OnSourceInitialized(object sender, EventArgs e)
            {
                IntPtr windowHandle = (new WindowInteropHelper(this)).Handle;
                HwndSource src = HwndSource.FromHwnd(windowHandle);
                src.AddHook(new HwndSourceHook(WndProc));
            }

            private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
            {
                // Handle WM_DEVICECHANGE... 
                if (msg == 0x219)
                {
                    InitHead();
                }

                return IntPtr.Zero;
            }

谢谢你。

编辑:

我做了以下,仍然没有工作:

if (msg == 0x0219)
            {
                switch (wParam.ToInt32())
                {
                    case 0x8000:
                        {
                            InitHead();
                        }
                        break;
                }
            }
4

1 回答 1

3

为了检测设备是否已插入,我们将钩子添加到我们的Window_Loaded方法中,如下所示

HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
source.AddHook(new HwndSourceHook(this.WndProc));

处理程序如下所示:

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    if (msg == 0x0219 && (int)wParam == 0x8000)  // 0x8000 is DBT_DEVICEARRIVAL
    {
        ProcessConnected();
    }

    return IntPtr.Zero;
}

不幸的是,拔出设备时不会触发任何 DBT_DEVICE 常量,而是在您尝试从 Windows 中弹出设备时调用它们。

于 2012-10-03T19:51:08.117 回答