【问题标题】:No idea how to automate key presses in C#不知道如何在 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 用于这样的事情。它是一个非常强大的工具,值得研究。

标签: c# keyboard keyboard-shortcuts


【解决方案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 时才有效)

    【讨论】:

      猜你喜欢
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 2022-10-04
      • 2011-07-12
      • 1970-01-01
      • 2021-02-06
      相关资源
      最近更新 更多