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

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

我想要做的是在按住键的同时将它们的键不断加亮,但是一旦再次提起键,就将要删除的加亮,如果可能的话,我也希望同时按下多个键。这是我不知道该怎么办?

希望有道理:)

有什么帮助吗?

谢谢

最佳答案

如果愿意添加对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);
    }


每次按键都会给您“向上”和“向下”消息。从那里,您应该能够将其合并到您的应用程序中。

祝好运!

08-17 22:27