KeyDown Issue C#

В настоящее время я пытаюсь сделать регистрацию ключей. В основном, чтобы увидеть, какие ключи я использую больше всего. Проблема в том, что нужно только, чтобы он обнаруживал кнопки F1-F12. Другая проблема в том, что я не знаю, как атаковать, потому что это должно быть глобальное событие.

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

Это то, что я пытался до сих пор, я должен сфокусировать приложение, чтобы оно работало.

Я не хочу, чтобы пользователь регистрировал горячие клавиши самостоятельно. Я хочу, чтобы они были установлены, вот чем это отличается от установки глобальных горячих клавиш с помощью C#

2 ответа

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? Поскольку приложение не совсем понимает, что я пытаюсь сделать.

Когда мне нужно сделать это в 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);
   }
}
using System.Runtime.InteropServices;

Импортировать User32.dll:

[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);

Следующая функция create проверит нажатие клавиши:

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;
}
Другие вопросы по тегам