【C#スクリプト】イベント - x0oey6B8/KeyToKey-Web GitHub Wiki
目次
イベント一覧
イベント名 | 内容 |
---|---|
TriggerPressed | トリガーが押されたら発生します。 |
TriggerReleased | トリガーが離されたら発生します。 |
KeyStateChanged | キーやマウスのボタン、ホイールをスクロール操作があった場合に発生します。 |
KeyPressed | キーやマウスが押されたら発生します。 |
KeyReleased | キーやマウスが離されたら発生します。 |
Hooked | キー、マウスのボタン、ホイール操作、マウスの移動があった場合に発生します。 |
MouseMoving | マウスの移動があった場合に発生します。 |
ControllerStateChanged | コントローラーのボタンやスティックが入力されたら発生します |
Disposing | スクリプトの終了処理時に発生します。 |
キーとマウスの入力イベント
:warning: キーとマウスの入力イベントの注意事項 :warning:
環境設定で入力の監視方法をフック
にしている場合、KeyStateChanged
とHook
のイベントハンドラ内における処理速度に注意する必要があります。
フック使用時の入力の伝わり方はざっくり以下のとおりであるため、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#スクリプトの基本的な仕様#スクリプトの強制終了を参照してください。