C#按住键时写入文本

时间:2011-02-15 10:37:27

标签: c# visual-studio-2010 keyboard console

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

当用户按下按钮时,我希望按钮被突出显示,这是没有问题的,因为我正在做的是在设置了Console.BackgroundColor的按钮上重写。

我想做的是按住键时不断突出显示键,但是一旦按键再次抬起,突出显示就会被删除,如果可能的话,我也想要按下多个键。同时。这是我无法弄清楚怎么办?

希望有道理:)

任何帮助?

由于

3 个答案:

答案 0 :(得分:1)

如果您愿意添加对Windows.Forms的引用,请调用Application.Run()以运行消息队列,并调用外部Windows DLL,您可以使用以下代码执行此操作:http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx

该页面将向您展示如何挂钩低级按键键盘事件。

要同时勾选键盘键盘事件,您需要添加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);
    }

每次按键都会显示“Up”和“Down”消息。从那里你应该能够将它合并到你的应用程序中。

祝你好运!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我害怕AFAIK控制台应用程序无法检测到多个同时按键(不是修改键,如shift或ctrl),因此无法正常工作。

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

ConsoleKeyInfo currentKeyPressed;
ConsoleKeyInfo lastKeyPressed;
do
{
    currentKeyPressed = Console.ReadKey();
    if (lastKeyPressed.Key == currentKeyPressed.Key)
        continue;
    RemoveHighlight();
    HighlightKey(keyPressed.Key);
    lastKeyPressed = currentKeyPressed;         
} while ((keyPressed.Key & ConsoleKey.Escape) != ConsoleKey.Escape);