Leap Motion v1 が自動でアップグレードされないようにする

Leap Motion Controller のソフトウェアは、v2 よりも v1 のほうがトラッキングの精度自体は高いため、
v1 を利用したいケースも依然としてあります。

Leap Motion v1 の実行環境をセットアップするには、
Leap Motion のセットアップで書いた通りインストーラーを実行したあと、
コントロール パネルを開いて [最新版を自動的にインストール] のチェックをオフに設定します。

Leap-v1-ControlPanel

この設定変更をしないと、しばらく経つと自動的に v2 のインストーラーをダウンロードしてアップグレードしてしまいます。

問題はここからです。
v2 にアップグレードしてしまったとしても「v2 アンインストール& v1 再インストール」でやり直せると思いきや、
なんと v1 を再インストールした直後に間髪入れずに v2 にアップグレードされてしまいます。

これはどうやら、最初に v2 にアップグレードしたときに使用したインストーラーが
    C:\Windows\Temp\leap
に残っていることが原因のようです。

Leap 2.3.1 Installer

このインストーラーを削除してから v1 のインストーラーを再実行すれば解決します。

// 他にも、ユーザー フォルダーの「AppData\Local\Temp\~nsu.tmp」フォルダーに .exe ファイルが残ってたりしますが、
// こちらは直接影響しないようです。

参照
Leap Motion のセットアップ

カテゴリー: 周辺機器. タグ: , . 1 Comment »

デスクトップ アプリから WinRT API を呼び出す (Windows 10)

デスクトップ アプリから WinRT API を呼び出す方法について、
Windows 8.0 ではセンサーのデータを SignalR でホストする (1) という記事で、
Windows 8.1 ではデスクトップ アプリから WinRT API を呼び出す (Windows 8.1) という記事で書きましたが、
今回は Windows 10 の場合です。

コンソール アプリケーションや WPF アプリケーションなどのプロジェクトを作成したら、
.csproj ファイルを手動で編集して、<TargetPlatformVersion> を追加します。
今回は 10.0 を指定します。

<TargetPlatformVersion>10.0</TargetPlatformVersion>

次に、WinRT API への参照です。
Windows 8.0 および 8.1 向けの WinRT API は「Windows」のみでしたが、
Windows 10 向けの WinRT API は細分化されており、用途に応じて参照を追加します。
コアとなるのは Windows.Foundation で、
例えば照度や方位などのセンサーを利用するには Windows.Devices が必要です。

<Reference Include="Windows.Devices" />
<Reference Include="Windows.Foundation" />
<Reference Include="System.Runtime.WindowsRuntime">
  <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll</HintPath>
</Reference>

.csproj ファイルへの変更 (SourceTree):

image

 

作成したサンプル
WinrtSample (GitHub)

バージョン情報
Windows 10
Visual Studio 2015
.NET Framework 4.5

参照
センサーのデータを SignalR でホストする (1)
デスクトップ アプリから WinRT API を呼び出す (Windows 8.1)

カテゴリー: .NET Framework. タグ: , . 2 Comments »

Leap Motion v2 のセットアップ

Leap Motion SDK のバージョン 2 系を .NET 開発で利用するためのセットアップの方法について記述します。
(以前に Leap Motion のセットアップを書きましたが、その改訂版です。)

Leap Motion のサイトから、ドライバーおよび SDK をダウンロードできます。
開発環境ではこれらの両方が必要ですが、非開発環境ではドライバーのみをインストールします。

 

■ 非開発環境におけるセットアップ

Setup Your Leap Motion Controller でドライバーをダウンロードしてインストールします。

最新版以外のバージョンを指定してインストールするには、
V2 Desktop | Leap Motion Developers で Leap Motion SDK (ZIP) をダウンロードします。
ダウンロードするには、アカウントの登録が必要です。
この ZIP ファイルにはドライバーのインストーラーが含まれているので、それを実行します。

なお v2 では、Leap Motion コントロール パネルの [トラッキング] タブで
[道具の追跡] が既定でオフになっているようです。
指以外のツールを使えるようにするには、これをオンに設定します。

 

■ 開発環境におけるセットアップ

V2 Desktop | Leap Motion Developers で、
現在の最新版である [Leap Motion SDK v2.3.1.31549] (ZIP) をダウンロードします。
ダウンロードするには、アカウントの登録が必要です。
この ZIP ファイルを任意の場所に展開します。
中にドライバーのインストーラーが含まれているので、まずそれを実行します。

Leap Motion SDK を .NET Framework 4.0 以降のアプリケーションで利用するには、

  • LeapSDK\lib\LeapCSharp.NET4.0.dll (.NET アセンブリ)
  • LeapSDK\lib\x86\Leap.dll (ネイティブ アセンブリ)
  • LeapSDK\lib\x86\LeapCSharp.dll (ネイティブ アセンブリ)

が必要になります。

したがって、Visual Studio における手順は以下のようになります。

  1. プロジェクトの参照に LeapCSharp.NET4.0.dll を追加する。
  2. プロジェクトのプロパティを開いて、
    [ビルド イベント] – [ビルド後イベントのコマンド ライン] に次のようなコマンドを設定する。
    (DLL のパスを指定します。環境によって変わるので注意してください。)

copy "$(ProjectDir)..\..\LeapSDK\lib\x86\Leap.dll" "$(TargetDir)"
copy "$(ProjectDir)..\..\LeapSDK\lib\x86\LeapCSharp.dll" "$(TargetDir)"

ビルド イベント

ビルドしたときに、この 3 つの DLL が bin にコピーされていれば OK です。

出力ディレクトリ

 

(追記) また、上記のような設定を自動で実施するための NuGet パッケージを作成しました。

 

バージョン情報
Leap Motion SDK 2.3.1
Visual Studio 2015

参照
Setup Your Leap Motion Controller
V2 Desktop | Leap Motion Developers

カテゴリー: 周辺機器. タグ: , . 1 Comment »

Leap Motion のセットアップ

Leap Motion Controller のバージョン 1 系を .NET で利用するためのセットアップの方法について記述します。
(なお、v1 系の最終版は v1.2 になると思われます。
v2 系については、改訂版として Leap Motion v2 のセットアップを書きました。)

Leap Motion のサイトから、Software および Developer SDK をダウンロードできます。
開発環境ではこれらの両方が必要ですが、非開発環境では Software (ドライバー) のみをインストールします。

■ Software (ドライバー)

公式には Leap Motion Software と呼ぶようですが、要するにドライバーです。
Developer SDK + Documentation にアクセスして、[v.1.2.2 for Windows] をクリックします。
ダウンロードするには、アカウントの登録が必要です。
このインストーラーを実行して、Software をインストールします。

なお、Setup Your Leap Motion Controller でダウンロードできる Software は、現在ではバージョン 2 系になっています。

■ Developer SDK

Developer SDK + Documentation にアクセスして、[v.1.2.0.10970 for Windows] をクリックします。
ダウンロードするには、アカウントの登録が必要です。
ファイル名は LeapDeveloperKit_release_win_1.2.0+10970.zip で、これを任意の場所に展開するだけです。

Developer SDK を .NET Framework 4.0 以降のアプリケーションで利用するには、

  • LeapDeveloperKit\LeapSDK\lib\LeapCSharp.NET4.0.dll (.NET アセンブリ)
  • LeapDeveloperKit\LeapSDK\lib\x86\Leap.dll (ネイティブ アセンブリ)
  • LeapDeveloperKit\LeapSDK\lib\x86\LeapCSharp.dll (ネイティブ アセンブリ)

が必要になります。

したがって、Visual Studio における手順は以下のようになります。

  1. LeapCSharp.NET4.0.dll をプロジェクトの参照に追加する。
  2. プロジェクトを右クリックして [追加] – [既存の項目] を選択し、
    Leap.dll および LeapCSharp.dll をリンクとして追加する。
  3. Leap.dll および LeapCSharp.dll のプロパティで、
    [出力ディレクトリにコピー] を [新しい場合はコピーする] に設定する。

既存項目の追加

出力ディレクトリにコピー

ビルドしたときに、この 3 つの DLL がコピーされていれば OK です。

出力ディレクトリ

 

(追記) 上記のような設定を自動で実施するための NuGet パッケージを作成しました。

(追記) Leap Motion v1 が自動でアップグレードされないようにするというのを書きました。
v1 を使い続けるにはこの設定が必要です。

 

バージョン情報
Leap Motion Software 1.2.2
Leap Motion Developer SDK 1.2.0
Visual Studio 2013

参照
Setup Your Leap Motion Controller
Leap Motion Developers
V1 Developer SDK + Documentation

カテゴリー: 周辺機器. タグ: , . 2 Comments »

デスクトップ アプリから WinRT API を呼び出す (Windows 8.1)

以前に、センサーのデータを SignalR でホストする (1) という記事で、
Windows 8.0 の環境でデスクトップ アプリから WinRT API を呼び出す方法について書きましたが、
Windows 8.1 の環境でも同様に設定します。
(追記: Windows 10 向けにデスクトップ アプリから WinRT API を呼び出す (Windows 10) を書きました。)

まず、.csproj ファイルを手動で編集して、<TargetPlatformVersion> を追加します。

<TargetPlatformVersion>8.1</TargetPlatformVersion>

次に、WinRT API への参照です。

<Reference Include="Windows" />
<Reference Include="System.Runtime.WindowsRuntime">
  <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll</HintPath>
</Reference>

 

.csproj ファイルへの変更:

.csproj ファイルへの変更

 

なお TargetPlatformVersion は、
Surface Pro (初代) では 8.0, 8.1 のどちらを指定してもビルドは成功するのですが、
Surface Pro 3 では 8.0 に指定するとビルド エラーになってしまいます。
(%ProgramFiles(x86)%\Windows Kits\8.0 に .winmd ファイルが存在しないせい?)

 

バージョン情報
Windows 8.1
Visual Studio 2013
.NET Framework 4.5

参照
センサーのデータを SignalR でホストする (1)
デスクトップ アプリから WinRT API を呼び出す (Windows 10)

カテゴリー: .NET Framework. タグ: , . 2 Comments »

センサーのデータを SignalR でホストする (1)

WinRT API と ASP.NET SignalR を組み合わせたサンプルを作成してみました。
内容は次の通りです。

(1) (Windows ストア アプリからでなく) コンソール アプリケーションから WinRT API を呼び出して、
     Windows 端末のセンサーのデータをトラッキングする。

(2) そのデータを ASP.NET SignalR でセルフホストして、プッシュ送信する

(3) ブラウザーから (2) のサービスにアクセスしてデータを受け取る

(4) コンソール アプリケーションから (2) のサービスにアクセスしてデータを受け取る

(5) (2) のサービスをタスクバーの通知領域に常駐させる

ちなみに、このようにセンサーのデータをローカルでホストしてブラウザーからも利用できるようにする仕組みは、
Kinect for Windows や Leap Motion でも実現されています。
(Kinect for Windows SDK では、1.8 でサンプルとして追加)
ASP.NET SignalR を利用すれば、任意のデータをこれらと同様にホストすることができます。

ソースコードは WinRT-SignalR-Sample (GitHub) にあります。
以下では、これらの作成手順について順番に解説していきます。

 

(1) コンソール アプリケーションから WinRT API を呼び出す

(追記: Windows 8.1 向けにデスクトップ アプリから WinRT API を呼び出す (Windows 8.1) を、
Windows 10 向けにデスクトップ アプリから WinRT API を呼び出す (Windows 10) を書きました。)

まずは Visual Studio でソリューションを作成し、コンソール アプリケーション プロジェクトを作成します。

Windows 端末のセンサー情報を利用するための準備として、WinRT API への参照を追加します。
しかし WinRT API は、初期状態では Visual Studio 2012 の参照マネージャーに現れません。

次のようにプロジェクト ファイルを編集する必要があります。
プロジェクトを右クリックして、[プロジェクトのアンロード] をクリックします。

プロジェクトのアンロード

プロジェクトを右クリックして、[編集 (ProjectName).csproj] をクリックします。

プロジェクト ファイルの編集

プロジェクト ファイル (.csproj) を直接編集できるようになるので、最初の <PropertyGroup> に次の行を追加します。

<TargetPlatformVersion>8.0</TargetPlatformVersion>

TargetPlatformVersion を追加

編集が終わったら、このファイルを閉じます。
プロジェクトを右クリックして、[プロジェクトの再読み込み] をクリックします。

すると、参照マネージャーの左側に「Windows」が現れるようになるので、その中の「Windows」を追加します。

WinRT API を追加

 

さらに、参照マネージャーの右下の [参照] から、次のパスに存在する System.Runtime.WindowsRuntime.dll を追加します。

%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll

これで、参照の準備は完了です。

なお、この手順の代わりに、最初に手動で編集したときに次のものを追加してもかまいません。

<Reference Include="Windows" />
<Reference Include="System.Runtime.WindowsRuntime">
  <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll</HintPath>
</Reference>

 

では、WinRT API を呼び出してセンサーのデータを取得するコードを記述します。
LightSensor クラスを利用して照度を、Compass クラスを利用して方位をトラッキングすることにします。

最初に

using Windows.Devices.Sensors;

を追加し、Main メソッドを実装します。


static void Main(string[] args)
{
    var lightSensor = LightSensor.GetDefault();
    lightSensor.ReportInterval = 500;
    Action<LightSensorReading> notifyLight =
        r => Console.WriteLine("Light: {0} lx", r.IlluminanceInLux);
    notifyLight(lightSensor.GetCurrentReading());
    lightSensor.ReadingChanged += (o, e) => notifyLight(e.Reading);

    var compass = Compass.GetDefault();
    Action<CompassReading> notifyCompass =
        r => Console.WriteLine("Compass: {0:N3} °", r.HeadingMagneticNorth);
    notifyCompass(compass.GetCurrentReading());
    compass.ReadingChanged += (o, e) => notifyCompass(e.Reading);

    Console.WriteLine("Press [Enter] to exit.");
    Console.ReadLine();
}


 

実行します。
端末に手をかざしたり端末を回転したりすれば、照度や方位が変化したことがレポートされます。

SensorsHost

このようにして、Windows ストア アプリでなくても、通常の .NET のアプリで WinRT API を利用できます。

 

ちなみに、System.Runtime.WindowsRuntime.dll への参照を追加しないで実装した場合、コンパイラ エラーとなります。
コンパイラが出力するメッセージに従うと、

  • System.Runtime.dll
  • System.Runtime.InteropServices.WindowsRuntime.dll

への参照を追加することでも解決できます。

 

つづく

次: センサーのデータを SignalR でホストする (2)

作成したサンプル
WinRT-SignalR-Sample (GitHub) (今回までの分)
WinRT-SignalR-Sample (GitHub)

バージョン情報
Visual Studio 2012
.NET Framework 4.5

参照
How to call WinRT APIs in Windows 8 from C# Desktop Applications
デスクトップ アプリからのWinRT API利用

カテゴリー: .NET Framework. タグ: , . 4 Comments »