【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);

 

装飾キー連動押し:間隔は難しい。

事前準備

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

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

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

おまけ:ショートカット

関連ページリンク

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

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

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

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

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

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

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

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

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

Bookmark this on Yahoo Bookmark
Buzz This
Bookmark this on Delicious
Bookmark this on Digg
Share on reddit
Share on LinkedIn
Bookmark this on @nifty clip
LINEで送る
email this
Pocket




コメントを残す

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