[解決済み] C#でキー押下イベントをプログラム的に生成するには?
2022-09-07 11:11:38
質問
キーボードでキーが押されたことをシミュレートするイベントをプログラムで作成するにはどうしたらよいでしょうか?
どのように解決するのですか?
質問はWPFとタグ付けされていますが、これまでの回答は特定のWinFormsとWin32です。
WPFでこれを行うには、単純にKeyEventArgsを構築し、ターゲット上でRaiseEventを呼び出します。 たとえば、現在フォーカスされている要素に Insert キーの KeyDown イベントを送信するためです。
var key = Key.Insert; // Key to send
var target = Keyboard.FocusedElement; // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(
new KeyEventArgs(
Keyboard.PrimaryDevice,
PresentationSource.FromVisual(target),
0,
key)
{ RoutedEvent=routedEvent }
);
このソリューションはネイティブコールやWindowsの内部に依存しないので、他のものよりもずっと信頼性が高いはずです。 また、特定の要素でキー入力をシミュレートすることができます。
このコードは PreviewKeyDown、KeyDown、PreviewKeyUp、および KeyUp イベントにのみ適用可能であることに注意してください。 もしTextInputイベントを送信したい場合は、代わりにこれを行うことになります。
var text = "Hello";
var target = Keyboard.FocusedElement;
var routedEvent = TextCompositionManager.TextInputEvent;
target.RaiseEvent(
new TextCompositionEventArgs(
InputManager.Current.PrimaryKeyboardDevice,
new TextComposition(InputManager.Current, target, text))
{ RoutedEvent = routedEvent }
);
も注意してください。
-
コントロールは Preview イベントを受け取ることを想定しています。例えば PreviewKeyDown は KeyDown の前でなければなりません。
-
target.RaiseEvent(...)を使用すると、イベントを直接ターゲットに送信します。 のようなメタ処理なしで アクセラレータ、テキスト合成、および IME のようなメタ処理なしで、イベントをターゲットに直接送信します。 これは通常、あなたが望むことです。 一方、もしあなたが本当に 実際のキーボードのキーをシミュレートしたい を使うことになるでしょう。 InputManager.ProcessInput()を使用します。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] 乱数(int)を生成する方法を教えてください。
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] ランダムな英数字の文字列を生成するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み】C#でコンソールアプリケーションを終了するコマンドは何ですか?