当用户按下我想要的按钮是按钮我有文本的一些作品代表按钮,以便例如,它看起来像这样[ D ][ E ][ F ][ G ]
C#写文字时键按住
一个C#控制台应用程序突出显示这是没有问题的,因为我现在正在用Console.BackgroundColor设置重写按钮。
我想要做的是当钥匙被按下时,他们的钥匙会不断突出显示,但只要钥匙再次被抬起,突出显示被移除,如果可能的话,我还想要按下多个钥匙同一时间。这是我无法弄清楚该怎么办?
希望有道理:)
任何帮助吗?
感谢
当用户按下我想要的按钮是按钮我有文本的一些作品代表按钮,以便例如,它看起来像这样[ D ][ E ][ F ][ G ]
C#写文字时键按住
一个C#控制台应用程序突出显示这是没有问题的,因为我现在正在用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);
}
这会给你“上“和”关闭“每个按键的消息。从那里你应该能够将它合并到你的应用程序。
祝你好运!
很抱歉,但控制台应用程序只有键盘事件(即太不实际的事件,除非你是在一个循环中,检查按键)没有的KeyDown。 keyPress或KeyUp事件。它没有GUI世界的事件。
恐怕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);
您目前如何确定哪个键被按下? – 2011-02-15 10:45:21
ConsoleKeyInfo cki; cki = Console.ReadKey(true); 然后检测cki.Key.ToString()的输出。ToLower() – Jack 2011-02-15 10:47:23