如何检查 C# 中是不是正在按下某个键(控制台应用程序)

Posted

技术标签:

【中文标题】如何检查 C# 中是不是正在按下某个键(控制台应用程序)【英文标题】:How to check if a key is being pressed in c# (console app)如何检查 C# 中是否正在按下某个键(控制台应用程序) 【发布时间】:2016-02-16 19:55:57 【问题描述】:

所以我正在尝试创建一个钢琴游戏。其中特定键的作用类似于钢琴键。例如: 如果按下“A”,则播放音符 C 的音频文件 如果按下“s”,则播放音符 D 的音频文件,依此类推。 我是这样写的:

piano:         
 if (pressedKey.Key == ConsoleKey.A) ;
             
                 Console.Beep();


                 
                     goto piano;

哔声将被替换为仅用于测试的音频文件。 因此,当程序到达这段代码并且我点击“a”时,它开始一遍又一遍地发出哔哔声,直到程序关闭它才会停止。我希望每次按下“A”时它都会发出一声哔哔声。我如何实现这一目标? 对不起,愚蠢的问题和糟糕的英语。

【问题讨论】:

如何填充“pressedKey”变量? 这里的代码非常少,但是一旦按下“A”键,您似乎就会导致无限循环。你正在按下 A 键,它会返回钢琴,它会记住旧键,因为你再也没有检查过。顺便说一句,goto 是邪恶的。 :) goto 有任何合法用途吗? @redFIVE 似乎是这样:***.com/questions/6545720/… @rene 在我看来,这些都是关于其有用性的非常薄弱的​​论据 【参考方案1】:

好吧,您似乎想在控制台应用程序中的按键上播放一些声音,这就是您要这样做的方式!

public static void PressAnyKey()

    Console.WriteLine("Stroke Keys!");
    do
    
        var mykey = Console.ReadKey(true); //Read The Key

        switch (mykey.Key)
        
            case ConsoleKey.UpArrow:
                Console.WriteLine("UpArrow Pressed");
                //do your stuff
                break;
            case ConsoleKey.DownArrow:
                Console.WriteLine("DownArrow Pressed");
                //do your stuff
                break;
            case ConsoleKey.RightArrow:
                Console.WriteLine("RightArrow Pressed");
                //do your stuff
                break;
            case ConsoleKey.LeftArrow:
                Console.WriteLine("LeftArrow Pressed");
                //do your stuff
                break;
        
     while (true);

如果您想从系统扬声器发出一些声音,您可以使用Console.Beep(Frequency,Duration) 方法和int Frequencyint Duration 变量来调整它的频率和持续时间! 这就是添加几行后函数的样子!

public static void BeepOnKey()

    int frequency = 10000;
    int duration = 100;

    Console.WriteLine("Use keyboard arrows to adjust frequency and duration");
    do
    
        while (!Console.KeyAvailable)
        
            Console.Beep(frequency, duration);
            //this method emits beep sound from system speakers
        

        var mykey = Console.ReadKey(true); //Read The Key

        switch (mykey.Key)
        
            case ConsoleKey.UpArrow:
                Console.WriteLine("UpArrow Pressed");
                frequency += 100;
                frequency = Math.Min(frequency, 15000);
                //do your stuff
                break;
            case ConsoleKey.DownArrow:
                Console.WriteLine("DownArrow Pressed");
                frequency -= 100;
                frequency = Math.Max(frequency, 1000);
                //do your stuff
                break;
            case ConsoleKey.RightArrow:
                Console.WriteLine("RightArrow Pressed");
                duration += 100;
                duration = Math.Min(duration, 1000);
                //do your stuff
                break;
            case ConsoleKey.LeftArrow:
                Console.WriteLine("LeftArrow Pressed");
                duration -= 100;
                duration = Math.Max(duration, 100);
                //do your stuff
                break;
        
     while (true);

【讨论】:

以上是关于如何检查 C# 中是不是正在按下某个键(控制台应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

如何从文本框(windows窗体)检查主键是不是存在于我的数据库中,c#

如何检测是不是在 HTML 页面上的任意位置按下了某个键?

如何检测 C++ 中是不是按下了任何键?

如何检查用户是不是正在按下特定键,即 Enter Key Like python's keyboard module?

检测是不是在 C# 中按下了任何键(不是 A、B,而是任何键)

如何使用 VC++ 检测是不是已按下某个键