KeyDown问题c#

时间:2015-10-20 10:32:38

标签: c# key keypress keydown keyup

我目前正在尝试进行keydown注册。 基本上只是为了看看我最常用的键。 问题是只想要它检测F1-F12按钮。 另一个问题是,我不知道如何攻击它,因为它必须是全球性的。

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

到目前为止我一直在尝试,我必须将应用程序的重点放在工作上。

我不希望用户自己注册热键。 我想要它们设置,这与Set global hotkeys using C#

有什么不同

3 个答案:

答案 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;
}