我有一个C#控制台应用程序,其中包含一些代表按钮的文本,例如它看起来像[ D ][ E ][ F ][ G ]
当用户按下按钮时,我希望按钮被突出显示,这是没有问题的,因为我正在做的是在设置了Console.BackgroundColor的按钮上重写。
我想做的是按住键时不断突出显示键,但是一旦按键再次抬起,突出显示就会被删除,如果可能的话,我也想要按下多个键。同时。这是我无法弄清楚怎么办?
希望有道理:)
任何帮助?
由于
答案 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。类似于以下内容(您需要自己实现RemoveHighlight
和HighlightKey
方法):
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);