【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#スクリプトの基本的な仕様#スクリプトの強制終了を参照してください。