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 に答える