SendKeys.Send()でチェックボックスをチェックするワザップ


地味に調べてもなかなか見つからなかったので

👇※記事の対象者と背景を追記しました。🙇‍♀️
そのままタイトルのとおりに SendKeys.Send() メソッドを使用してチェックボックスをチェックする方法になります。
業務で使用している Windows Form のアプリケーションの操作を自動化したいという話があり、いろいろ要件はあったのですが最終的には人間が行っているキーボード操作をそのままエミュレートして再現する形をとりました。

タイトルに対する結論としてはチェックボックスにフォーカスされている状態で☟でおkです。

SendKeys.Send(" ")

つまるところ、普通にキーボード操作でチェックボックスをチェックするように SPACE キーの入力をエミュレートしたいのですが リファレンス の特殊なキーの一覧( Enter など)には SPACE がありませんし SendKeys.Send("{SPACE}") とすると System.ArgumentException: 'キーワード "SPACE" は有効ではありません。' という例外が発生します。

半角空白文字で SPACE キーの入力をエミュレートできるということに関してはリファレンス本文中の下記の記述から推察できるのかなと思います。こちらについては自分なりにそういう風に解釈したということなので解釈違いがあればご指摘ください🙇‍♂️

各キーは、1つまたは複数の文字で表されます。 1つのキーボード文字を指定するには、文字自体を使用します。 たとえば、文字 A を表すには、文字列 "A" をメソッドに渡します。

こちらも

ENTER や TAB、文字ではなくアクションを表すキーなど、キーを押したときに表示されない文字を指定するには、次の表のコードを使用します。

これらから、A のキーと文字列 "A" の対応のように SPACE キーが対応する文字列は " " になりますし、対応する文字列が存在するのであれば Enter などと同じように特殊なコード {Enter} の一覧には存在しないのは当然である、というように解釈しました。

一応下記の環境下で SendKeys.Send(" ") でチェックボックスにチェックできることを確認しました。

  • Visual Studio 2019 (16.5.0)
  • Windows Forms App (.NET Core) C#
  • .NET Core 3.1

下図のような適当なフォームを作成し button1Click イベントのイベントハンドラで SendKey.Send します。button1 をクリックするたびに checkBox1 のチェックのオンオフが切り替わります。

button1_Click
private void button1_Click(object sender, EventArgs e)
{
    SendKeys.Send("{TAB}");
    SendKeys.Send(" ");
}