我目前正在尝试进行keydown注册。 基本上只是为了看看我最常用的键。 问题是只想要它检测F1-F12按钮。 另一个问题是,我不知道如何攻击它,因为它必须是全球性的。
if (e.KeyCode.ToString() == "F1")
{
MessageBox.Show("F1 pressed");
}
到目前为止我一直在尝试,我必须将应用程序的重点放在工作上。
我不希望用户自己注册热键。 我想要它们设置,这与Set global hotkeys using C#
有什么不同答案 0 :(得分:0)
当我需要在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);
}
}
答案 1 :(得分:0)
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的回应? 由于应用程序并不真正理解我正在尝试做什么。
答案 2 :(得分:-1)
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;
}