C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.93016 の関連記事表示

<< 0 >>
■93016  USB接続の検出方法
□投稿者/ じょこびっち -(2019/11/14(Thu) 14:45:04)

    分類:[C#] 

    USBで接続している特定のデバイスが電源OFF、またはUSBが抜けてしまった時に「接続が切れました」的なメッセージを出したいのですが、どのようにしたらUSBの接続が外れたり差し込まれたりの検出ができるのでしょうか?
    調べてみてもManagementScopやらManagementEventWatcherやらEventArrivedEventHandlerやら、メインフォームに書くのか、クラスを新しく作るのかもよくわかりませんでした。
    よろしくお願いします。
親記事 /過去ログ161より / 関連記事表示
削除チェック/

■93017  Re[1]: USB接続の検出方法
□投稿者/ 魔界の仮面弁士 -(2019/11/14(Thu) 15:11:02)
    2019/11/14(Thu) 15:16:11 編集(投稿者)

    No93016 (じょこびっち さん) に返信
    > どのようにしたらUSBの接続が外れたり差し込まれたりの検出ができるのでしょうか?

    過去ログとしては No66415 , No78061 , No91134 あたりでしょうか。
    WndProc メソッドをオーバーライドして、WM_DEVICECHANGE メッセージ (0x219) を捉えたら拾えるかも。
    OS 側でデバイスとして認識されない、給電目的で繋がれるデバイスなどは駄目でしょうけれど…。


    > USBで接続している特定のデバイスが電源OFF、またはUSBが抜けてしまった時に

    ここで想定しているデバイスはどういったものでしょうか。

    USB 接続されるデバイスとしては、電力線利用の LED ライトや扇風機とかもありますし、
    USB-PD で PC 側に電力供給するための AC 電源などもあります。


    電源 OFF という点だけ見ると、USB マウス や USB キーボード といった HID 系では無さそう。
    モバイルハードディスクや光学ディスクドライブ、スピーカー、USB ハブ、
    USB モニターなどについては、スイッチのあるものと無いものがありますが、
    USB 接続の LAN や USB メモリー、カードリーダー等は、電源スイッチは
    付いていないものしか見たことが無いです。

    電源スイッチのある可能性が高そうなデバイスとしては、プリンターとか、
    USB 接続の Wi-Fi ルーターとか、ビデオカメラなど…?
記事No.93016 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93023  Re[2]: USB接続の検出方法
□投稿者/ じょこびっち -(2019/11/15(Fri) 09:16:24)
    No93017 (魔界の仮面弁士 さん) に返信
    >
    > 過去ログとしては No66415 , No78061 , No91134 あたりでしょうか。
    > WndProc メソッドをオーバーライドして、WM_DEVICECHANGE メッセージ (0x219) を捉えたら拾えるかも。
    > OS 側でデバイスとして認識されない、給電目的で繋がれるデバイスなどは駄目でしょうけれど…。

    WM_DEVICECHANGEは捉える事が出来ました。
    でも、DBT_DEVICEARRIVALやDBT_DEVICEREMOVECOMPLETEは捉えられません。
    ちなみにDBT_DEVICEARRIVALをDBT_DEVNODES_CHANGED(0x0007)に書き換えたら捉えられました。
    DBT_DEVICEARRIVALやDBT_DEVICEREMOVECOMPLETEは無理なのでしょうか?

    protected override void WndProc(ref Message m)
    {
    if (m.Msg == 0x219)
    {
    if (m.WParam.ToInt32() == 0x8000)
    {
    MessageBox.Show("8000");
    }
    else if (m.WParam.ToInt32() == 0x8004)
    {
    MessageBox.Show("8004");
    }
    }
    base.WndProc(ref m);
    }


    > ここで想定しているデバイスはどういったものでしょうか。
    >
    > 電源スイッチのある可能性が高そうなデバイスとしては、プリンターとか、
    > USB 接続の Wi-Fi ルーターとか、ビデオカメラなど…?

    オシロスコープです。
    USBにオシロがつながっているなどの特定は難しいのでしょうか?
記事No.93016 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93024  Re[3]: USB接続の検出方法
□投稿者/ みい -(2019/11/15(Fri) 09:25:01)
    オシロなら測定以外の状態取得やバージョン取得のコマンド(関数)はありませんか?
    応答がなかったら切断とみなし、切断されたら成功するまで定期的に接続を試みるとか。
記事No.93016 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93026  Re[4]: USB接続の検出方法
□投稿者/ じょこびっち -(2019/11/15(Fri) 09:48:49)
    2019/11/15(Fri) 10:00:19 編集(投稿者)

    No93024 (みい さん) に返信
    > オシロなら測定以外の状態取得やバージョン取得のコマンド(関数)はありませんか?
    > 応答がなかったら切断とみなし、切断されたら成功するまで定期的に接続を試みるとか。

    みいさん。
    そうなんですよね。それは念頭にあるんですよ。
    WM_DEVICECHANGEを捉えたらコマンドを送って接続状況を判断する。
    しかし、せっかくなので更に詳しい事も知っておければ後で役に立ちますし、コードを書く時に色んな判断が出来ると思っています。
    アドバイスしていただいたのに申し訳ありません。
記事No.93016 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93028  Re[5]: USB接続の検出方法
□投稿者/ とっちゃん -(2019/11/15(Fri) 10:30:45)
    No93026 (じょこびっち さん) に返信

    > WM_DEVICECHANGEを捉えたらコマンドを送って接続状況を判断する。
    > しかし、せっかくなので更に詳しい事も知っておければ後で役に立ちますし、コードを書く時に色んな判断が出来ると思っています。
    > アドバイスしていただいたのに申し訳ありません。

    Device管理系はまずはここのページを読むところからかなぁ。。。

    ・Device Management(Mirosoft Docs)
    https://docs.microsoft.com/en-us/windows/win32/devio/device-management?WT.mc_id=DT-MVP-32182

    接続したデバイスとのやり取りは機械固有のやり取りが基本になりますが、そうではなく全般となるとまたいろいろと違ってきます。
    RegisterDeviceNotification もきちんと対象となるインターフェースを指定しておけばかなりいろんな情報を通知してもらえるはずです。
記事No.93016 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93029  Re[6]: USB接続の検出方法
□投稿者/ じょこびっち -(2019/11/15(Fri) 13:16:30)
    No93028 (とっちゃん さん) に返信
    >
    > 接続したデバイスとのやり取りは機械固有のやり取りが基本になりますが、そうではなく全般となるとまたいろいろと違ってきます。
    > RegisterDeviceNotification もきちんと対象となるインターフェースを指定しておけばかなりいろんな情報を通知してもらえるはずです。
    >
    少し読んで気が付いたのですが、USBメモリを抜き差ししたら
    No93023のコードでDBT_DEVICEARRIVALとDBT_DEVICEREMOVECOMPLETEは捉えられました。
    オシロスコープだけ捉えられませんでした。
    てことはRegisterDeviceNotificationでオシロスコープを指定すれば(何をどう指定するの?)いいって事ですか?
    あまり理解出来てないので抵当な事を言ってしまっているかもですが。。。
記事No.93016 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93030  Re[7]: USB接続の検出方法
□投稿者/ じょこびっち -(2019/11/15(Fri) 13:42:15)
    このサイトに記載されているコードを試したらできました。
    https://stackoverflow.com/questions/1976573/using-registerdevicenotification-in-a-net-app

    とっちゃんさんのおっしゃる通りRegisterDeviceNotificationを使っていますね。
    これから解析して理解してみたいと思います。

    魔界の仮面弁士さん、みいさん、とっちゃんさん
    アドバイスありがとうございました。
    次回もよろしくお願いします。
記事No.93016 のレス / END /過去ログ161より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -