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

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

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

No.91134 の関連記事表示

<< 0 >>
■91134  USBメモリを安全に「取り出し」た時のイベント
□投稿者/ ゆう -(2019/06/02(Sun) 20:06:07)

    分類:[C#] 

    Visual Studio 2019 C# Windowsフォームアプリケーション(.NET Framework)

    USBメモリの抜き差しを認識し、アプリの表示に反映したいと考えています。
    USBメモリを物理的に抜き差しした時は以下のコードで認識出来ますが、
    エクスプローラの右クリックメニューから「取り出し」を実行した時はイベントが発生しません。
    「取り出し」を実行した時のイベントを捕捉する方法をご存じの方はいらっしゃいませんでしょうか?

    ManagementEventWatcher watcher = new ManagementEventWatcher();
    watcher.Query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent");
    //watcher.Query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent");
    watcher.EventArrived += (sender2, e2) =>
    {
    ushort eventType = Convert.ToUInt16(e2.NewEvent.Properties["EventType"].Value);
    switch (eventType)
    {
    case 1: Console.WriteLine($"Configuration Changed"); break;
    case 2: Console.WriteLine($"Device Arrival"); break;
    case 3: Console.WriteLine($"Device Removal"); break;
    case 4: Console.WriteLine($"Docking"); break;
    default: Console.WriteLine($"{eventType}"); break;
    }
    };
    watcher.Start();
親記事 /過去ログ157より / 関連記事表示
削除チェック/

■91137  Re[1]: USBメモリを安全に「取り出し」た時のイベント
□投稿者/ 774RR -(2019/06/03(Mon) 09:16:43)
    2019/06/03(Mon) 14:18:55 編集(投稿者)

    オイラんとこの VS2005 Form App でフツーに WM_DEVICECHANGE をハンドルしたら
    挿入時に WPARAM=0x8000 DBT_DEVICEARRIVAL が通知されたし
    右下タスクバーアイコンから安全な取り外しで WPARAM=0x8004 DBT_DEVICEREMOVECOMPLETE も来たよ。
    @WinXPSP3 x86 32bit standalone

    Win10 1803 x64 で同じプログラムを試してみたら
    安全な取り外しで WM_DEVICECHANGE が来なくて
    実際にブツを抜いたら WM_DEVICECHANGE + DBT_DEVICEREMOVECOMPLETE が来た
    ので、これはもう Windows 自体の仕様変更であるものと思われるっす。
記事No.91134 のレス /過去ログ157より / 関連記事表示
削除チェック/

■91138  Re[1]: USBメモリを安全に「取り出し」た時のイベント
□投稿者/ kiku -(2019/06/03(Mon) 09:49:48)
    下記記事を参考に下記環境でテストアプリ作ってみました。

    参考ページ:https://ohyajapan.hatenadiary.org/entry/20081123/p1
    環境
    ・Win10(64bit)
    ・VisualStudio2017
    ・C#
    ・.NETFrameWork4.7.2

    >USBメモリを物理的に抜き差しした時は以下のコードで認識出来ますが、
    >エクスプローラの右クリックメニューから「取り出し」を実行した時はイベントが発生しません。

    確かにエクスプローラの右クリックメニューからの取り出しを行うと
    なぜかイベントが発生しないですね。
    ただし、その後物理的にUSBを取り外すことを行うと
    イベントが発生するため、問題ないのではないかと思いました。
記事No.91134 のレス /過去ログ157より / 関連記事表示
削除チェック/

■91149  Re[2]: USBメモリを安全に「取り出し」た時のイベント
□投稿者/ ゆう -(2019/06/03(Mon) 21:10:14)
    当方の環境を書くのを忘れていました。
    Windows 10 Pro 64bit
    Visual Studio Community 2019
    C# Windowsフォームアプリケーション(.NET Framework)
    .NET Framework 4.7.2

    >774RRさん
    Win10の仕様ですか…

    >kikuさん
    確かに普通はすぐに取り外すので実用上問題ないかもしれませんが、
    プログラマーの気持ち的にはやはり認識したいじゃないですか…!!
記事No.91134 のレス /過去ログ157より / 関連記事表示
削除チェック/

■91153  Re[3]: USBメモリを安全に「取り出し」た時のイベント
□投稿者/ とっちゃん -(2019/06/04(Tue) 10:14:01)
    No91149 (ゆう さん) に返信

    > 確かに普通はすぐに取り外すので実用上問題ないかもしれませんが、
    > プログラマーの気持ち的にはやはり認識したいじゃないですか…!!

    わからないとは言わないけど、あんまり気にしないな。お仕事的にも。。。w

    今のUSBは普通に WM_DEVICECHANGED が飛んでくるので(WMIもこの通知を受けていろいろやってるはず)
    あんまり気にしてなかったんですが、昔は RegisterDeviceNotification で通知を受け取るように
    設定する必要がありました。

    試してないのでわかりませんが、登録すると来るかもしれません。
    C# なので、W のほうのリンクを張っておきます。

    https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-registerdevicenotificationw
記事No.91134 のレス /過去ログ157より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -