键下问题 c#
本文关键字:问题 | 更新日期: 2023-09-27 18:18:25
我目前正在尝试制作一个键降寄存器。基本上只是为了看看我最常使用哪些键。问题是只希望它检测 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;
导入用户32.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;
}