【C#スクリプト】イベント - x0oey6B8/KeyToKey-Web GitHub Wiki

目次

イベント一覧

イベント名 内容
TriggerPressed トリガーが押されたら発生します。
TriggerReleased トリガーが離されたら発生します。
KeyStateChanged キーやマウスのボタン、ホイールをスクロール操作があった場合に発生します。
KeyPressed キーやマウスが押されたら発生します。
KeyReleased キーやマウスが離されたら発生します。
Hooked キー、マウスのボタン、ホイール操作、マウスの移動があった場合に発生します。
MouseMoving マウスの移動があった場合に発生します。
ControllerStateChanged コントローラーのボタンやスティックが入力されたら発生します
Disposing スクリプトの終了処理時に発生します。

キーとマウスの入力イベント

:warning: キーとマウスの入力イベントの注意事項 :warning:

環境設定で入力の監視方法をフックにしている場合、KeyStateChangedHookのイベントハンドラ内における処理速度に注意する必要があります。

フック使用時の入力の伝わり方はざっくり以下のとおりであるため、KeyToKey 内において処理の遅延が発生するとアクティブウィンドウに伝わるのも遅くなり入力遅延を引き起こします。

Windows => KeyToKey => アクティブウィンドウ

そのためイベントハンドラ内で処理に時間をかけるのは避けてください。

時間のかかる処理を行いたい場合は Task.Runなどを使用して別のスレッドで処理を行ってください。

TriggerPressed

TriggerPressedイベントはトリガーが押されたときに発生します。

TriggerPressed += (sender, e) =>
{
};

TriggerReleased

TriggerPressedイベントはトリガーが離されたときに発生します。

TriggerReleased += (sender, e) =>
{
};

KeyStateChanged

KeyStateChanged はキーやマウスのボタン、ホイールをスクロール操作があった場合に発生します。

キーボードは仕様上キーを長押ししていると連続的な Down イベントが発生しますが、KeyStateChangedでは連続的な Down イベントが除外された入力イベントのみを受け取ることができます。

KeyStateChanged += (sender, e) =>
{
    // ここで受け取ります。
};

イベント引数のメンバ

イベントの第二引数である KeyStateChangedEventArgs は以下のプロパティを持ちます。

プロパティ名 説明
Key 入力されたキー/マウスのボタン
IsPressed キーが押されたかどうか trueは押されたことを示します。 falseは話されたこと示します。
IsInjected :warning:フック使用時にのみ機能します。キーがアプリによって入力されたかどうかを示します。値がtrueである場合キーがアプリによる入力であることを示します。値がfalseである場合はドライバレベルでの入力が行われたことを示します。なお、KeyToKey 以外の(WindowsAPI を使用する)アプリからの入力でも値がtrueになります。
IsCancel :warning:フック使用時にのみ機能します。入力をキャンセルするかどうかを設定します。入力をキャンセルする場合は 値をtrueに設定します。

KeyStateChangedEventArgs はキーを変換するメソッドを持ちます。

// Aキーが入力されたらBキーを入力します。
e.Convert(Keys.A, Keys.B);

// 特定のキーが押されていた場合
// Aキーが入力され、かつLCtrlキーが押されていたらBキーを入力します。
e.Convert(Keys.A, Keys.B, Keys.LControlKey);

// LControlKey + LAlt + A -> B
e.Convert(Keys.A, Keys.B, Keys.LControlKey, Keys.LAlt);

// 条件を指定することも可能
e.Convert(Keys.A, Keys.B, () => @this.IsEnabled);

KeyPressed

キー/マウスが押された時に発生します。

KeyPressed += (sender, e) =>
{
    // キー
    var key = e.Key;

    // アプリから入力されたかどうか
    var isInjected = e.IsInjected;

    // 入力キャンセル
    e.IsCancel = true;
};

KeyReleased

キー/マウスが離された時に発生します。

KeyReleased += (sender, e) =>
{
    // キー
    var key = e.Key;

    // アプリから入力されたかどうか
    var isInjected = e.IsInjected;

    // 入力キャンセル
    e.IsCancel = true;
};

Hooked イベント

:warning:フック使用時にのみ機能します。

Hookedイベントはキー、マウスのボタン、ホイール操作、マウスの移動があった場合に発生します。

KeyStateChangedよりも先に発生し、KeyStateChanged イベントで説明をしたような連続的な Down イベントなども受け取ることができます。

Hooked += (sender, e) =>
{
    // ここで受け取ります。
};

イベント引数のメンバ

イベントの第二引数である HookEventArgs は以下のプロパティを持ちます。

プロパティ名 説明
Key 入力されたキー/マウスのボタン
IsPressed キーが押されたかどうか trueは押されたことを示します。 falseは話されたこと示します。
IsToggleKey 入力されたキーがトグルタイプのキーだった場合は値がtrueになりそれ以外はfalseです。なおトグルタイプのキーとは次のとおりです。半角全角, カタカナ/ひらがな/ローマ字, CapsLock, マウスホイール
HookType 発生した入力がキーボードかマウスによるものかを示します。キーボードの場合はHookType.Keyboard、マウスの場合はHookType.Mouseになります。
EventType 発生した入力の種類を示します。通常のキーやマウスボタンの入力である場合はEventType.Stroke、マウスの移動はEventType.Move、マウスホイールのスクロールはEventType.Wheelです。
Keyboard フック処理に使用されたキーボード用の構造体です。詳しくは以下のページを参照してください。https://docs.microsoft.com/ja-jp/windows/win32/api/winuser/ns-winuser-kbdllhookstruct
Mouse フック処理に使用されたマウス用の構造体です。詳しくは以下のページを参照してください。https://docs.microsoft.com/ja-jp/windows/win32/api/winuser/ns-winuser-mousehookstruct
IsInjected キーがアプリによって入力されたかどうかを示します。値がtrueである場合キーがアプリによる入力であることを示します。値がfalseである場合はドライバレベルでの入力が行われたことを示します。なお、KeyToKey 以外の(WindowsAPI を使用する)アプリからの入力でも値がtrueになります。
IsCancel 入力をキャンセルするかどうかを設定します。入力をキャンセルする場合は 値をtrueに設定します。

HookEventArgs はキーを変換するメソッドを持ちます。

// Aキーが入力されたらBキーを入力します。
e.Convert(Keys.A, Keys.B);

// 特定のキーが押されていた場合
// Aキーが入力され、かつLCtrlキーが押されていたらBキーを入力します。
e.Convert(Keys.A, Keys.B, Keys.LControlKey);

// LControlKey + LAlt + A -> B
e.Convert(Keys.A, Keys.B, Keys.LControlKey, Keys.LAlt);

// 条件を指定することも可能
e.Convert(Keys.A, Keys.B, () => @this.IsEnabled);

MouseMoving

MouseMovingイベントはマウスが移動したら発生します。

MouseMoving += (sender, e) =>
{
    // ここで受け取ります。
};

イベント引数のメンバ

イベントの第二引数である MouseMoveEventArgs は以下のプロパティを持ちます。

プロパティ名 説明
OldPoint 古い座標
NewPoint 新しい座標
Delta 移動量(新しい座標 - 古い座標)
IsInjected :warning:フック使用時にのみ機能します。アプリによる移動かどうかを示します。値がtrueである場合キーがアプリによる移動であることを示します。値がfalseである場合はドライバレベルでの移動が行われたことを示します。なお、KeyToKey 以外の(WindowsAPI を使用する)アプリからの移動でも値がtrueになります。
IsCancel :warning:フック使用時にのみ機能します。移動をキャンセルするかどうかを設定します。入力をキャンセルする場合は 値をtrueに設定します。

コントローラーの入力イベント

// イベントにイベントハンドラを登録します。
ControllerStateChanged += (sender, e) =>
{
    // ここで受け取ります。
};

// スクリプトがすぐに終了しないように待機します。
Wait();

プロパティとメソッド

// 入力の発生したボタン
ControllerButtons button = e.Button;

// 押されているかどうか
bool isPressed = e.IsPressed;


// Aボタンが入力されたらEnterキーを入力します。
e.Convert(ControllerButtons.A, Keys.Enter);

// 特定のキーが押されていた場合
// Aボタンが入力され、かつ十字キー上が押されていたらEnterキーを入力します。
e.Convert(ControllerButtons.A, Keys.Enter, ControllerButtons.DPadDown);

// A + DpadDown + LB -> A
e.Convert(ControllerButtons.A, Keys.Enter, ControllerButtons.DPadDown, ControllerButtons.LB);

// 条件を指定することも可能
e.Convert(ControllerButtons.A, Keys.Enter, () => true);

Disposing

Disposingイベントに関してはC#スクリプトの基本的な仕様#スクリプトの強制終了を参照してください。