在 C# 中模擬按鍵

Saad Aslam 2022年4月20日
在 C# 中模擬按鍵

本文演示了一種在 C# 中模擬按鍵的快速而直接的方法。

在測試期間,你可能需要將一系列按下的按鈕(擊鍵)傳輸到所選物件 - 控制元件或視窗。你可以通過將鍵程式碼傳輸到所選控制元件或視窗來模擬來自關鍵字測試和指令碼的擊鍵。

在 C# 中建立表單應用程式

首先,在 Visual Studio 中建立一個新的 Windows 窗體應用程式。

開啟你的 .cs 設計檔案並建立一個名為 numberLabel 的標籤,併為其分配一些可以是 "Text To Be Displayed" 的文字,將其對齊設定為 Middle Center 以看起來乾淨。

讓我們建立 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。

然後,我們需要一個 KeyDown 事件來識別和處理按鍵事件,要新增它,請轉到屬性面板並開啟帶有閃電符號的事件選項卡。向下滾動到 KeyDown 事件並雙擊它。

它將建立一個 Form1_KeyDown() 方法並將你導航到該方法。這個方法有兩個引數,一個 object 型別的 sender 和一個 KeyEventArgs 型別的事件 e

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)
        {

        }
    }
}

輸出:

當從鍵盤按下 Numpad 0 時。

從鍵盤按下小鍵盤 0

當從鍵盤按下 Enter 時。

從鍵盤按下回車鍵

Author: 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