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