C # - событие нажатия клавиш, когда форма не активна - PullRequest
0 голосов
/ 28 мая 2018

Привет, я делаю приложение, похожее на макрос мыши, в котором, когда вы нажимаете F, оно перемещает положение мышки между двумя точками, все работает, единственная проблема, с которой я сталкиваюсь, это то, что я хочу, чтобы это работало в фоновом режиме, какв том случае, если форма не отображается на моем экране.Как я могу это сделать?Если кто-нибудь может мне помочь, это было бы здорово.

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.F)
    {
        PointConverter pc = new PointConverter();
        Point pt = new Point();
        pt = (Point)pc.ConvertFromString("60, 700");
        Cursor.Position = pt;
        System.Threading.Thread.Sleep(5000);
        pt = (Point)pc.ConvertFromString("600, 700");
        Cursor.Position = pt;
    }

1 Ответ

0 голосов
/ 28 мая 2018

События относятся только к форме, пока она активна.Вы не можете использовать события в форме в фоновом режиме.Вместо этого используйте функцию GetKeyState.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646301(v=vs.85).aspx
Также обратите внимание на коды виртуальных клавиш.Я сделал приложение, которое слушает нажатия клавиш в фоновом режиме один раз.Мне пришлось использовать GetKeyState в цикле, который проверял каждый код виртуальной клавиши, чтобы увидеть, была ли она нажата.Но звучит так, как будто для вашего приложения вам просто нужно проверить горячие клавиши, которые вы хотите прослушать.
Вам понадобится запустить поток в фоновом режиме для вашего цикла или, возможно, использовать таймер.

-Edit- Вот еще немного кода для реализации функции GetKeyState.

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern byte GetKeyState(int nVirtKey);
...