アクセスできるデバイスを取得するには

デバイスを列挙する方法

DeviceInformationクラスのFindAllAsyncメソッドによってデバイスに登録されているすべての周辺機器を列挙することができます。

DeviceInformationCollection collection= await DeviceInformation.FindAllAsync();
foreach (DeviceInformation info in collection)
{
    listBoxDevices.Items.Add(string.Format("Name={0} IsEnabled={1} Id={2}",info.Name, info.IsEnabled, info.Id));
}

DeviceInformationは名前や使用可能かどうか、Idなどを取得することができます。

 

FindAllAsyncメソッドは高度なクエリ構文によってフィルタリングも可能です。

string selector = "System.Devices.InterfaceEnabled:=System.StructuredQueryType.Boolean#True";
DeviceInformationCollection collection= await DeviceInformation.FindAllAsync(selector);
foreach (DeviceInformation info in collection)
{
    listBoxDevices.Items.Add(string.Format("Name={0} IsEnabled={1} Id={2}",info.Name, info.IsEnabled, info.Id));
}

 

クエリ構文は書くのが難しいので通常はデバイスに対応したAPIのGetSelectorメソッドによってそのデバイスを特定するクエリ文字列を取得できるのでそれを使用します。

USBデバイスを列挙する場合

string selector=UsbDevice.GetDeviceSelector(0x2341,0x0043);
var deviceInfoList=await DeviceInformation.FindAllAsync(selector);

 

スキャナなどのDeviceClass列挙体で提供されるデバイスはDeviceClass列挙体を渡すことでフィルタリングすることもできます。

DeviceInformationCollection collection= await DeviceInformation.FindAllAsync(DeviceClass.ImageScanner);
foreach (DeviceInformation info in collection)
{
    listBoxDevices.Items.Add(string.Format("Name={0} IsEnabled={1} Id={2}",info.Name, info.IsEnabled, info.Id));
}

 

DeviceClassは以下の様なものが提供されます。

All すべてのデバイス
AudioCapture オーディオキャプチャデバイス
AudioRender オーディオレンダリング
PortableStorageDevice ポータブルストレージデバイス
VideoCapture ビデオキャプチャデバイス
ImageScanner スキャナーデバイス
Location 位置情報デバイス
DeviceInformationCollection collection = await DeviceInformation.FindAllAsync(DeviceClass.ImageScanner);
foreach (DeviceInformation info in collection)
{
    listBoxDevices.Items.Add(string.Format("Name={0} IsEnabled={1} Id={2}",info.Name, info.IsEnabled, info.Id));
}

 

デバイスの接続を監視する方法

DeviceInformationクラスはDeviceWatcherを作成できます。

DeviceWatcherはStart()したときに現在接続可能なデバイスを列挙し、デバイスが接続されるたびにAddイベントで新たに接続されたDeviceInformationクラスを渡します。

 

DeviceWatcher watcher=DeviceInformation.CreateWatcher();
watcher.Added += (s, arg) =>
{
    DeviceInformation info = arg;
    Debug.WriteLine(string.Format("Device Add Name={0} Id={1}",info.Name,info.Id));
};
watcher.Removed += (s, arg) =>
{
    DeviceInformationUpdate update = arg;
    Debug.WriteLine(string.Format("Device Remove Id={0}", update.Id));
};
watcher.Updated += (s, arg) =>
{
    DeviceInformationUpdate update = arg;
    Debug.WriteLine(string.Format("Device Update Id={0}", update.Id));
};


watcher.Start();

DeviceWatcherはStop()メソッドを呼び出すまで監視し続けます。

watcher.Stop()

 

目次

garicchi
対話システムとSFとアニメが好き たまにMicrosoftコミュニティに出現します たまに日経Linuxとラズパイマガジンで記事を書いたり Microsoft MVP 2014~2018(引退済み)

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください