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

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

C# と VB.NET の入門サイト

USBメモリを安全に「取り出し」た時のイベント

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■91134 / inTopicNo.1)  USBメモリを安全に「取り出し」た時のイベント
  
□投稿者/ ゆう (1回)-(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();

引用返信 編集キー/
■91137 / inTopicNo.2)  Re[1]: USBメモリを安全に「取り出し」た時のイベント
□投稿者/ 774RR (692回)-(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 自体の仕様変更であるものと思われるっす。

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

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

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

確かにエクスプローラの右クリックメニューからの取り出しを行うと
なぜかイベントが発生しないですね。
ただし、その後物理的にUSBを取り外すことを行うと
イベントが発生するため、問題ないのではないかと思いました。

引用返信 編集キー/
■91149 / inTopicNo.4)  Re[2]: USBメモリを安全に「取り出し」た時のイベント
□投稿者/ ゆう (2回)-(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さん
確かに普通はすぐに取り外すので実用上問題ないかもしれませんが、
プログラマーの気持ち的にはやはり認識したいじゃないですか…!!
引用返信 編集キー/
■91153 / inTopicNo.5)  Re[3]: USBメモリを安全に「取り出し」た時のイベント
□投稿者/ とっちゃん (597回)-(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

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ