【C#】キーエミュレート送信のまとめ【覚書メモ】


Windows アプリを作るときに C#で キーボード操作をエミュレートする方法には SendKeysクラスとkeybd_event の2つの方法があります。

クリップボード操作とはまた少し違います。

操作目的 コマンド メリット
キーボード押下メッセージを送る方法 SendKeys.Send() キーボード押下情報を文字列としてほぼそのまま送れます。 簡単。 (その分、一部の特殊キーの動作や 細かい処理をすることができない
キーシグナルを送る方法 keybd_event() 電子レベルに近い形で キーコマンド(キーコード)を送れます。 OSレベルで細かいこと(押し下げのタイミングやほぼすべての特殊キーなど)が可能。 シグナルを送るかたちになるので、 その分コーディングが面倒になる。

説明

SendKeys クラス

キーの入力を文字列でアプリケーションに渡すことができる機能。

SendWait()メソッドはSend()とほぼ同じで、 SendWait()の違うところは送った後 アプリケーションからの応答を待ちます。

日本語も可能です。

Shift/Ctrl/Altキーもエミュレートしたり、 矢印やエンターキーファンクションキー、ESCキーなども送信できます。 複数回のコマンド送出も簡単にできるので、長い文字列を入れることが簡単です。

IMEなどの影響を受けたり、入力するアプリケーション上のショートカットキーや 補完コマンドの影響に注意する必要があります。

特殊なキー (windowsなど)は送信できません。

SendKeys.Send メソッド (String) (System.Windows.Forms)

サンプル

普通の文字列

そのまま引数に渡せばOK.

SendKeys.Send("apple"); SendKeys.Send("わび・さび");

特殊キー

{}で囲います。中身は MSのリファレンスを確認してください。

SendKeys.Send("{RIGHT}");

修飾(modifier)キー関連

頭に +などの文字を付けて引数に渡します。

キー コード
SHIFT キーを押し +
CTRL キーを押し ^
ALT キー %
Enter ~ or{ENTER}

※上3つは 同時押しの効果を働かせられます。

コピーのような入力方法

SendKeys.Send("^C");

複数の文字に対して修飾キーを聞かせるには()で囲います。

SendKeys.Send("+(AC)");

+自体の送信

SendKeys.Send("{+}");

複数回押し

後ろに数字を置き{}で囲います。

SendKeys.Send("{RIGHT 42}");

参考:SendKeys クラス (System.Windows.Forms) https://msdn.microsoft.com/ja-jp/library/system.windows.forms.sendkeys(v=vs.110).aspx

keybd_event()

OSレベルでほとんどのキーを押すことができます(HWレベルは無理ですが)。 ややこしいキーでも、かなりの特殊キーも押すことができます。 キーコードはキーボードイベントを参考にしてください。

キーコードのシグナルの変化を制御するので その分プログラムは面倒になります。 また押下時間の調整もコードすることになり難しいです。

押下(Up/Down)

※キャラコードを指定できるので、英文字などはASCIIコードが楽です。

押下(Down)

keybd_event( 'A', 0, 0, 0 );

リリース(Up) keybd_event( 'A', 0, 2, 0);

右キー(0x27)押しっぱなし

keybd_event(0x27, 0, 0, 0 );

装飾キー押し : Ctrl(0x11) 押しっぱなし。

keybd_event(0x11, 0, 0, (UIntPtr)0);

特殊キー:Windowsキー押し(WIn_L)

keybd_event(0x5B, 0, 0, (UIntPtr)0);

装飾キー連動押し(Ctrl-vなどそれぞれ押して、離す処理) :間隔は難しい。

以下はCtrl-cなどを実行するサンプル関数コード meta に Ctrl や Altのキーを設定すること想定しています。

事前準備

その他

入力キーを確認するサンプルコード(TextBoxにeventや表示を設定する形)

一つ目の引数は keydowonの KeyValueと同じコード体系です。 コード対応表は、以下のサイトがとても役に立ちます(感謝)。

◆VBAでAPIのキーボードイベントのキーコード一覧: 倉庫

(web archive)

おまけ:ショートカット

関連ページリンク

メソッド作成時に手を抜く方法(メソッドが引数、無名メソッド)【C#】

アプリケーションの設定を保存しておく方法【C#】

デバッグや通知に便利なメッセージ通知方法の使い分け【C#】

座標操作のメソッドの使い分け【C#】

クリップボード操作方法の原則【C#】

アイコンイメージ3つの取得方法サンプルプログラム【C#】

プログラミング初心者にお勧めの言語

マウスでアプリやコマンドを一瞬で実行する作業効率化ランチャー - windows ソフト - 仕事効率化

締め切り前バリバリ集中して働くためのwindowsタイマーアプリ- りらっくすたいむ

Delicious にシェア
Digg にシェア
reddit にシェア
LinkedIn にシェア
LINEで送る
email this
Pocket

18,251 views.



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です