デスクトップアプリでWindows Runtime APIをコールする(センサーとか)

前から、デスクトップアプリからWindows Runtime API(の一部)を呼び出せるのは知っていたのですが、最近、本当にコールする必要が生じたので、やり方をここに書いておきます。

※この投稿はストアアプリより、デスクトップアプリの方が良いです…という話ではありません。使えるWinRT APIは一部だし、セキュリティ、パフォーマンスなどストアアプリで使った方がいいので、なるべくストアアプリを使うことをお勧めします。

Windows Runtime APIを使おうとするのは、Visual Studioで、”Windowsデスクトップ”→”WPFアプリケーション”プロジェクトテンプレートで作ったプロジェクトです。このプロジェクトは本来.NET FrameworkのAPIを使用します。

プロジェクトファイル(C#なら*.csproj)をテキストエディタ等で開きます。

<Project>...</Project>という記述がありますね。その中に<PropertyGroup>…</PropertyGroup>という定義がいっぱいあります。これらに並べて、

  <PropertyGroup>
    <TargetPlatformVersion>8.0</TargetPlatformVersion>
  </PropertyGroup>

を入れます。

プロジェクトをVSで再度開きます。

参照設定に、以下のパスに存在する、Windows.winmd というファイルを追加します。

C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral

※32ビットOSの場合は、”Program Files\Windows Kits…

これで設定は終わり。

例えば、加速度センサーなら、

var accelerometer = Windows.Devices.Sensors.Accelerometer.GetDefault();

と、こんな風に取り出すことができます。但し、イベントを”+=”の様な普通の形式では使うことはできません。