C# でキーを押すことをシミュレートする

Saad Aslam 2023年10月12日
C# でキーを押すことをシミュレートする

この記事では、C# でキーを押すことをシミュレートするための迅速で簡単なアプローチを示します。

テスト中に、押された一連のボタン(キーストローク)を選択したオブジェクト(コントロールまたはウィンドウ)に送信する必要がある場合があります。選択したコントロールまたはウィンドウにキーコードを送信することにより、キーワードテストおよびスクリプトからのキーストロークをシミュレートできます。

C# でフォームアプリケーションを作成する

まず、VisualStudio で新しい Windows フォームアプリケーションを作成します。

.cs デザインファイルを開き、numberLabel という名前のラベルを作成し、"Text To Be Displayed"にできるテキストを割り当て、中央に配置してきれいに見えるようにします。

numPadButtonalphabetButton を作成し、両方のボタンに"Click Me"テキストを追加しましょう。numPadButton をダブルクリックすると、numPadButton_Click 関数に移動します。

この関数内で、numberLabel にテキストを割り当てます。このテキストは、割り当てるキーを押すと表示されます。

private void numPadButton_Click(object sender, EventArgs e) {
  numberLabel.Text = "Numpad Button 0 Pressed";
}

alphabetButton でも同じ手順を実行します。alphabetButton_Click 関数内で、numberLabel にいくつかの異なるテキストを割り当てます。このテキストは、押された別のキーで表示されるためです。

private void alphabetButton_Click(object sender, EventArgs e) {
  numberLabel.Text = "Enter Pressed";
}

出力:

C# でフォームアプリケーションを作成する

キーボードイベントがフォームに登録されているかどうかを判断するフォームの KeyPreview 機能を有効にする必要があります。したがって、フォーム全体をクリックし、右側のプロパティパネルから、KeyPreview 値を true に設定します。

次に、keypress イベントを識別して処理する KeyDown イベントが必要です。これを追加するには、プロパティパネルに移動し、稲妻の記号が付いた[イベント]タブを開きます。KeyDown イベントまで下にスクロールして、それをダブルクリックします。

Form1_KeyDown() メソッドを作成し、このメソッドに移動します。このメソッドは、タイプ objectsender とタイプ KeyEventArgs のイベント e の 2つの引数を取ります。

private void Form1_KeyDown(object sender, KeyEventArgs e) {}

次に、ボタンのクリックを使用して、特定のキーの押下を模倣する必要があります。この関数はプッシュされたキーを受け取り、受け取ったキーが NumPad0 であるかどうかを確認してから、numPadButton をクリックします。

if (e.KeyCode == Keys.NumPad0) {
  numPadButton.PerformClick();
}

alphabetButton では、同じプロセスに従う必要があります。したがって、[イベント]タブで、KeyUp イベントをダブルクリックし、Form1_KeyUp() 関数内で、受信したキーがEnterであるかどうかを確認してから、alphabetButton をクリックします。

using System;

namespace SimulateKeyPress {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void numPadButton_Click(object sender, EventArgs e) {
      numberLabel.Text = "Numpad Button 0 Pressed";
    }

    private void alphabetButton_Click(object sender, EventArgs e) {
      numberLabel.Text = "Enter Pressed";
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e) {
      if (e.KeyCode == Keys.NumPad0) {
        numPadButton.PerformClick();
      }
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e) {
      if (e.KeyCode == Keys.Enter) {
        alphabetButton.PerformClick();
      }
    }

    private void numberLabel_Click(object sender, EventArgs e) {}
  }
}

出力:

キーボードからテンキー0を押したとき。

キーボードからテンキー0 が押された

キーボードからEnterが押されたとき。

キーボードから Enter キーが押された

著者: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

関連記事 - Csharp GUI