-
Notifications
You must be signed in to change notification settings - Fork 0
マウスジェスチャー(C#スクリプト)
- 概要
- 準備
- ジェスチャーの実行
- スクリプトの解説
- MouseGesture クラスのオプション
- GestureDefitionGroup クラスのオプション
- GestureDefinition クラス
- 開始トリガーを複数設定する
- コントローラーを開始トリガーに使う
- ジェスチャーの認識結果を取得する
マウスジェスチャーとはマウスが特定のパターンの動きをすることでそのパターンに設定されている処理を実行させることができる機能です。
マウスジェスチャーを実行するための事前準備を行います。
以下のファイルをダウンロード/展開します。
展開したフォルダの中にある「GesturePatterns」フォルダを KeyToKey のフォルダに入れます。
「GesturePatterns」には「特定のパターン」の設定ファイルが入っています。
中身は編集ウィンドウの「ジェスチャーパターンの作成」から確認できます。
次に新しい C#スクリプトを作成し下記のスクリプトをコピペして保存します。(スクリプトの細かい部分は後で解説します)
あとはスタートアップスクリプトなどを使用してC#スクリプトを実行するとマウスジェスチャーの準備は終了です。
マウスジェスチャーの挙動の説明については次の項へ。
// マウスジェスチャーの基本的な機能を提供するクラスをインスタンス化します。
var gesture = new MouseGesture(@this, new[]
{
// ジェスチャーグループはジェスチャーの開始キーと各ジェスチャーの定義配列を指定します。
new GestureDefitionGroup(Keys.RButton, new[]
{
// 各定義はジェスチャーパターンの名前とジェスチャーが入力されたときに実行するコールバックメソッドを指定します。
new GestureDefition("up", Up),
new GestureDefition("down", Down),
new GestureDefition("left", Left),
new GestureDefition("right", Right),
new GestureDefition("z", Z),
})
})
{
CanWork = () => CanWorkOnActiveWindow,
ShowOutputResultInfo = false,
DeadZone = 100.0
};
// スクリプトがすぐに終了しないように待機する
Wait();
// ------------------------------------------------
// ジェスチャーの入力があったときの実行するメソッド
// ------------------------------------------------
void Up()
{
Console.WriteLine("Upが実行されました。");
}
void Down()
{
Console.WriteLine("Downが実行されました。");
}
void Left()
{
Console.WriteLine("Leftが実行されました。");
}
void Right()
{
Console.WriteLine("Rightが実行されました。");
}
void Z()
{
Console.WriteLine("Zが実行されました。");
}
マウスジェスチャーの実行ステップは 3 つあります。
- ジェスチャーの開始トリガーを押す。
- マウスで特定のパターンの動きを行う。
- 開始トリガーを離してパターンの認識を行いそのパターン用の処理を実行する。
前項のスクリプトの設定ではマウスの右ボタンが開始トリガーです。
マウスの右ボタンに設定した挙動は以下のとおりです。
- マウスを上に移動させると Up メソッドが実行されコンソールに「Up が実行されました」と表示されます。
- マウスを下に移動させると Down メソッドが実行されコンソールに「Down が実行されました」と表示されます。
- マウスを左に移動させると Left メソッドが実行されコンソールに「Left が実行されました」と表示されます。
- マウスを右に移動させると Right メソッドが実行されコンソールに「Right が実行されました」と表示されます。
- Z を描くと Z メソッドが実行されコンソールに「Z が実行されました」と表示されます。
はじめにマウスジェスチャーのコアとなるクラスをインスタンス化します。
MouseGesture
クラスをインスタンス化した時点でマウスジェスチャーの開始トリガーの入力受付が始まります。
第一引数には@this
を与えます。
第二引数にはGestureDefitionGroup
クラスの配列を与えます。
var gesture = new MouseGesture(@this, new[]
{
});
GestureDefitionGroup
にはジェスチャーの開始トリガーとなるキーとGestureDefition
の配列を指定します。
GestureDefition
にはジェスチャーパターンの名前とそのパターンの入力があった場合に実行するコールバックメソッドを指定します。
new GestureDefitionGroup(Keys.RButton, new[]
{
new GestureDefition("up", Up),
new GestureDefition("down", Down),
new GestureDefition("left", Left),
new GestureDefition("right", Right),
new GestureDefition("z", Z),
}),
void Up()
{
Console.WriteLine("Upが実行されました。");
}
void Down()
{
Console.WriteLine("Downが実行されました。");
}
void Left()
{
Console.WriteLine("Leftが実行されました。");
}
void Right()
{
Console.WriteLine("Rightが実行されました。");
}
void Z()
{
Console.WriteLine("Zが実行されました。");
}
var gesture = new MouseGesture(@this, new[]
{
})
{
CanWork = () => CanWorkOnActiveWindow,
ShowOutputResultInfo = false,
DeadZone = 100.0
};
ジェスチャーが実行できるかどうかを設定できます。
コンソールにジェスチャーの認識結果を表示します。
ジェスチャーが実行されない距離です。
var gesture = new MouseGesture(@this, new[]
{
new GestureDefitionGroup(Keys.RButton, new[]
{
})
{
KeyCancel = false,
}
})
トリガーとなる入力をキャンセルします(キー/マウスのみ)
第 3 引数のprobability
には認識結果の類似度のしきい値を設定することが出来ます。
new GestureDefition("up", Up, probability: 0.8)
第 4 引数のcanCallback
にはコールバックの実行条件を指定することが出来ます。
new GestureDefition("up", Up, probability: 0.8, canCallback: () => IsPressed(Keys.LShiftKey))
GestureDefinitionGroup
を複数指定することで複数の開始トリガー+トリガー用のパターン処理を行うことも可能です。
var gesture = new MouseGesture(@this, new[]
{
// マウスの右ボタンのジェスチャー
new GestureDefitionGroup(Keys.RButton, new[]
{
new GestureDefition("up", () => Console.WriteLine("[RButton]Up")),
}),
// マウスの中ボタンのジェスチャー
new GestureDefitionGroup(Keys.MButton, new[]
{
new GestureDefition("up", () => Console.WriteLine("[MButton]Up")),
}),
});
上記のサンプルはすべて Keys を使いましたが、ControllerButtons を設定することも可能です。
var gesture = new MouseGesture(@this, new[]
{
// コントローラーの十字キー下を設定
new GestureDefitionGroup(ControllerButtons.DPadDown, new[]
{
new GestureDefition("up", () => Console.WriteLine("Up")),
})
});
gesture.ShowOutputResultInfo
をtrue
に設定するとコンソールに認識結果が表示されます。
gesture.LastGestureRecognitionResult
は最後に行った認識の結果を取得します。
var gesture = new MouseGesture(@this, new[]
{
})
{
// コンソールに認識結果を表示します。
ShowOutputResultInfo = true
};
// 最後の認識結果を取得します。
var result = gesture.LastGestureRecognitionResult;