不知道如何在 C# 中自动按键

Posted

技术标签:

【中文标题】不知道如何在 C# 中自动按键【英文标题】:No idea how to automate key presses in C# 【发布时间】:2021-11-01 16:22:44 【问题描述】:

我正在尝试用 C# 为游戏制作宏按键。但问题是我完全不知道该怎么做。我在网上看过 - 即使在 Stack Overflow 中,但我找不到任何东西。我需要知道如何自动化按键(例如,按下并释放它/点击一个键)。它还需要能够仅在用户当前正在操作的窗口中按下该键。另外,由于我还没有弄清楚,我需要知道它是否允许您在该窗口中按下另一个键(停止按下另一个键)以退出单击。

这有点难以解释,所以我很可能会再发一篇关于它的帖子(“它”指的是文本“另外,因为我还没有弄清楚,我需要知道它是否允许你在该窗口中按另一个键(停止按下另一个键的键)以退出单击。”)。

一些额外的信息: 出于某种原因,我正在使用 .NET Core。 我正在使用 Visual Studio 2019。 我的程序不是 Windows 窗体程序。 我正在使用 Windows 10。

代码:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace BedWarsDropBot

    public class Program
    
        public static void Main(string[] args)
        
            Console.WriteLine("BedWars Drop Bot.\n\n");
            Console.WriteLine("This is a bot for dropping items on Bedwars. To start dropping, press V. To stop dropping, press X. To close, press Z.\n");
            var option = Console.ReadKey();
            bool check = true;
            switch (option.Key)
                case ConsoleKey.V:
                    Console.WriteLine("\nPlease enter your drop key/the key you would like to be pressed:\n");
                    var pressKey = Console.ReadKey();
                    Console.WriteLine("\nThe program is giving you 5 seconds to open up Bedwars, so that the program can start doing what it is meant to.");
                    System.Threading.Thread.Sleep(5000);
                    while (check)
                        
                    ;
                    break;
                case ConsoleKey.X:
                    break;
                case ConsoleKey.Z:
                    Console.WriteLine("\nYou chose to close this program. Are you sure? [Y] [N]:\n");
                    var closeKey = Console.ReadKey();
                    switch (closeKey.Key)
                        case ConsoleKey.Y:
                            Environment.Exit(0);
                            break;
                        case ConsoleKey.N:
                            Process.Start(AppDomain.CurrentDomain.FriendlyName);
                            Environment.Exit(0);
                            break;
                    
                    break;
            
        
    

【问题讨论】:

您需要使用 Windows API 来完成此任务。你在 Dotnet 和 c# 本身中找不到任何东西。但它很容易在 c# 中使用 winAPIs 可以使用C#。就像答案中提到的那样。但我个人会考虑将 AutoHotkey 用于这样的事情。它是一个非常强大的工具,值得研究。 【参考方案1】:

如果要添加对System.Windows.Forms 的引用,则可以使用 SendKeys 方法

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.sendkeys.send

或者你可以直接使用user32.dll中的keybd_event

https://www.pinvoke.net/default.aspx/user32/keybd_event.html

所有这些方法都只适用于 Windows

【讨论】:

【参考方案2】:

试试这个:

SendKeys.Send("What ever you want it to type");

(仅当您安装了 System.Windows.Forms dll 时才有效)

【讨论】:

以上是关于不知道如何在 C# 中自动按键的主要内容,如果未能解决你的问题,请参考以下文章

用按键精灵如何自动选择网页中combox中选项

求个天龙八部自动打图的按键脚本原码

c# 怎样禁止键盘按键

C# SendKeys 模拟按键输入为啥不能向DNF中模拟,比如在图中放个技能,根本没反应

怎么设置自动获取IP地址

按键精灵脚本中如何自动识别并输入验证码