Skip to content

マウスジェスチャー(C#スクリプト)

x0oey6B8 edited this page Dec 26, 2022 · 2 revisions

⚠️ このページはC#スクリプトでマウスジェスチャーを実行する方法についての解説です。⚠️

目次

  1. 概要
  2. 準備
  3. ジェスチャーの実行
  4. スクリプトの解説
  5. MouseGesture クラスのオプション
  6. GestureDefitionGroup クラスのオプション
  7. GestureDefinition クラス
  8. 開始トリガーを複数設定する
  9. コントローラーを開始トリガーに使う
  10. ジェスチャーの認識結果を取得する

概要

マウスジェスチャーとはマウスが特定のパターンの動きをすることでそのパターンに設定されている処理を実行させることができる機能です。

準備

マウスジェスチャーを実行するための事前準備を行います。
以下のファイルをダウンロード/展開します。

MouseGesture.zip

展開したフォルダの中にある「GesturePatterns」フォルダを KeyToKey のフォルダに入れます。
「GesturePatterns」には「特定のパターン」の設定ファイルが入っています。
中身は編集ウィンドウの「ジェスチャーパターンの作成」から確認できます。

1

次に新しい 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 つあります。

  1. ジェスチャーの開始トリガーを押す。
  2. マウスで特定のパターンの動きを行う。
  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が実行されました。");
}

MouseGestureクラスのオプション

var gesture = new MouseGesture(@this, new[]
{
})
{
    CanWork = () => CanWorkOnActiveWindow,
    ShowOutputResultInfo = false,
    DeadZone = 100.0
};

CanWork

ジェスチャーが実行できるかどうかを設定できます。

ShowOutputResultInfo

コンソールにジェスチャーの認識結果を表示します。

DeadZone

ジェスチャーが実行されない距離です。

GestureDefitionGroupクラスのオプション

var gesture = new MouseGesture(@this, new[]
{
    new GestureDefitionGroup(Keys.RButton, new[]
    {
    })
    {
        KeyCancel = false,
    }
})

KeyCancel

トリガーとなる入力をキャンセルします(キー/マウスのみ)

GestureDefinitionクラス

第 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.ShowOutputResultInfotrueに設定するとコンソールに認識結果が表示されます。
gesture.LastGestureRecognitionResultは最後に行った認識の結果を取得します。

var gesture = new MouseGesture(@this, new[]
{

})
{
    // コンソールに認識結果を表示します。
    ShowOutputResultInfo = true
};

// 最後の認識結果を取得します。
var result = gesture.LastGestureRecognitionResult;

最初に見てください

クイックガイド

プロファイル

環境設定

マクロ

割り当て

メニュー

画像認識

コントローラーと仮想コントローラー

仕様

その他

Clone this wiki locally