KeyDown问题c#

问题描述 投票:0回答:3

我目前正在尝试做一个按键down寄存器.基本就是看看我最常用的按键.问题是只想让它检测F1-F12按钮.另一个问题是不知道如何攻击它,因为它必须是一个全局事件。

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

迄今为止,我一直在尝试,我必须集中应用才能工作。

我不想让用户自己去注册热键,我想让他们自己去设置,这也是我和我的朋友们不同的地方。使用C#设置全局热键

c# key keypress keydown keyup
3个回答
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);
   }
}

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的响应吧? 因为应用程序并没有真正理解我想要做的事情。


-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;
}
© www.soinside.com 2019 - 2024. All rights reserved.