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