Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#按住键时写入文本_C#_Visual Studio 2010_Keyboard_Console - Fatal编程技术网

C#按住键时写入文本

C#按住键时写入文本,c#,visual-studio-2010,keyboard,console,C#,Visual Studio 2010,Keyboard,Console,我有一个C#console应用程序,其中包含一些表示按钮的文本,例如,它看起来像这样的[D][E][F][G] 当用户按下按钮时,我希望按钮高亮显示,这是没有问题的,因为我目前正在使用Console.BackgroundColor设置重写按钮 我想做的是,他们的关键是不断突出显示,而键被按下,但一旦键被再次解除突出显示被删除,如果可能的话,我还希望多个键被同时按下。这就是我不知道该怎么做的 希望这是有道理的:) 有什么帮助吗 谢谢抱歉,但控制台应用程序只有键盘事件(除非您处于循环中并检查按键),

我有一个C#console应用程序,其中包含一些表示按钮的文本,例如,它看起来像这样的
[D][E][F][G]

当用户按下按钮时,我希望按钮高亮显示,这是没有问题的,因为我目前正在使用Console.BackgroundColor设置重写按钮

我想做的是,他们的关键是不断突出显示,而键被按下,但一旦键被再次解除突出显示被删除,如果可能的话,我还希望多个键被同时按下。这就是我不知道该怎么做的

希望这是有道理的:)

有什么帮助吗


谢谢

抱歉,但控制台应用程序只有键盘事件(除非您处于循环中并检查按键),否则实际上也不是事件)没有按键功能。按键或按键事件。它没有GUI世界的事件。

恐怕控制台应用程序无法检测到多个同时按下的按键(不是shift或ctrl等修改键),因此无法正常工作

关于突出显示一个键,只要按下它,你就需要让你的Console.ReadKey在一个循环中。类似于以下内容(您需要自己实现
removelhighlight
HighlightKey
方法):


如果您愿意添加对Windows.Forms的引用,请调用Application.Run()以运行消息队列,并调用外部Windows DLL,您可以使用以下代码执行此操作:

该页面将向您展示如何钩住低级键盘向下键事件

要连接键盘事件,还需要添加WM_KEYUP常量:

    private const int WM_KEYDOWN = 0x0100;
    private const int WM_KEYUP = 0x0101;
然后修改
HookCallback
方法:

    private static IntPtr HookCallback(
        int nCode, IntPtr wParam, IntPtr lParam)
    {
        if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
        {
            int vkCode = Marshal.ReadInt32(lParam);
            Console.WriteLine("Down:" + (Keys)vkCode);
        }
        else if (nCode >= 0 && wParam == (IntPtr)WM_KEYUP)
        {
            int vkCode = Marshal.ReadInt32(lParam);
            Console.WriteLine("Up:" + (Keys)vkCode);
        }
        return CallNextHookEx(_hookID, nCode, wParam, lParam);
    }
每次按键都会显示“向上”和“向下”消息。从那里你应该可以将它整合到你的应用程序中


祝你好运

您当前如何确定按下了哪个键;cki=控制台.ReadKey(真);然后检测cki.Key.ToString().ToLower()的输出
    private static IntPtr HookCallback(
        int nCode, IntPtr wParam, IntPtr lParam)
    {
        if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
        {
            int vkCode = Marshal.ReadInt32(lParam);
            Console.WriteLine("Down:" + (Keys)vkCode);
        }
        else if (nCode >= 0 && wParam == (IntPtr)WM_KEYUP)
        {
            int vkCode = Marshal.ReadInt32(lParam);
            Console.WriteLine("Up:" + (Keys)vkCode);
        }
        return CallNextHookEx(_hookID, nCode, wParam, lParam);
    }