键下问题 c#

本文关键字:问题 | 更新日期: 2023-09-27 18:18:25

我目前正在尝试制作一个键降寄存器。基本上只是为了看看我最常使用哪些键。问题是只希望它检测 F1-F12 按钮。另一个问题是真的不知道如何攻击它,因为它必须是一个全球性事件。

if (e.KeyCode.ToString() == "F1")
{
    MessageBox.Show("F1 pressed");
}

是我到目前为止一直在尝试的,我确实必须专注于应用程序才能使其正常工作。

我不希望用户自己注册热键。我希望它们设置,这就是使用 C# 设置全局热键的不同

键下问题 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;
}