ある事情で、PCに接続するデバイスを制限する必要があったため、その内容を書いていきます。
改善点やおかしな点等があれば、御教授頂けると助かります。
まず、通常のUSBメモリだけでなく、スマホ等の機器接続も防ぐ必要があるため、「WMI」を利用します。
※DriveInfo.GetDriversでは取得できないケースもあるため。
その為、参照設定に[System.Management]を追加。
※脱着検知を行うのであれば、Windowsメッセージの受信処理を行えばよいが、Windows起動前からUSBメモリをポートに差しているケースなどがあるため、全PnPデバイスを常時監視対象に置く事としました。
<Windowsメッセージ処理Memo>
WM_DEVICECHANGE 0x0219
Control.WndProcをoverrideする。(定義のためFormのサブクラスが必要)
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Management;
namespace ConsoleCheck
{
class Program
{
// 情報取得コマンド
static ManagementObjectSearcher MyOCS = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity");
// 取得Object格納
static ManagementObjectCollection MyOC;
static void Main(string[] args)
{}
}
}
ここで、プログラム起動後にループさせ、一周ごとの検知デバイス数の変化によって、抜き差しの検知を行う処理を記入。
(増減の管理を切り分け可)
static void Main(string[] args)
{
//接続されてるPnPDeviceの総数
int CountDevice = MyOCS.Get().Count;
//1Scan前のPnPDeviceの総数
int CountDeviceBefour = CountDevice;
//ループ動作(←ループ条件は、後程要検証)
while (true)
{
MyOC = MyOCS.Get();
CountDevice = MyOC.Count;
if (CountDevice != CountDeviceBefour)
{
//ここでデバイス数変化時の処理を行う。
}
CountDeviceBefour = CountDevice;
}
}
ちょっと長くなりそうなので、今回はここまで。
【各ページへのリンク】
→ [c#]USB接続デバイス管理 1-[System.Management]の参照
この記事へのコメント