我目前正在尝试做一个按键down寄存器.基本就是看看我最常用的按键.问题是只想让它检测F1-F12按钮.另一个问题是不知道如何攻击它,因为它必须是一个全局事件。
if (e.KeyCode.ToString() == "F1")
{
MessageBox.Show("F1 pressed");
}
迄今为止,我一直在尝试,我必须集中应用才能工作。
我不想让用户自己去注册热键,我想让他们自己去设置,这也是我和我的朋友们不同的地方。使用C#设置全局热键
当我需要在C#中这样做时,我只需导入User32.dll,并利用GetASyncKeyState函数,如下所示。
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
private void globalKeyThread()
{
int state;
System.Windows.Forms.Keys keyToCheck = Keys.Space;
while (true)
{
state = Convert.ToInt32(GetAsyncKeyState(keyToCheck));
if (state == -32767)
{
// Handle what happens when key is pressed.
}
Thread.Sleep(10);
}
}
private void globalKeyThread()
{
System.Windows.Forms.Keys keyToCheck = Keys.F12;
while (true)
{
state = Convert.ToInt32(GetAsyncKeyState(keyToCheck));
if (state == -32767)
{
// Handle what happens when key is pressed.
timer1.Start();
}
Thread.Sleep(10);
}
}
这里的问题可能是Int32的响应吧? 因为应用程序并没有真正理解我想要做的事情。
using System.Runtime.InteropServices;
导入User32.dll。
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
下一个创建的函数将检查按键是否被按下:
private bool globalKeyThread(Keys key)
{
int state;
state = Convert.ToInt32(GetAsyncKeyState(key));
if (state == -32767)
{
return true;
}
return false;
}
现在定时器的功能只适用于F1:
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false;
if (globalKeyThread(Keys.F1))
{
MessageBox.Show("F1 press");
}
timer1.Enabled = true;
}