在 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