Узнайте, удерживается ли кнопка с помощью сообщений Windows

У меня есть программа, которая использует сообщения Windows, чтобы узнать, нажата кнопка или нет:

IntPtr GetMsg(int nCode, IntPtr wParam, IntPtr lParam)
    {
        if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
        {
            int vkCode = Marshal.ReadInt32(lParam);

            if ((Keys)vkCode == Keys.SomeKey)
            {
                /*Functions*/
            }
         }
     }

Кнопки можно нажимать где угодно, и программа все равно будет их обрабатывать.

Проблема заключается в том, что всякий раз, когда пользователь удерживает определенную кнопку, функция, которую выполняет кнопка, повторяется много раз в течение короткого периода времени. И хотя эта функция не такая уж тяжелая, она все равно заставляет компьютер зависать или работать медленно в течение пары секунд.

Если я знаю, что кнопка удерживается, я бы просто сделал эту функцию один раз.

Есть ли в сообщении Windows флаг или что-то, указывающее, что кнопка удерживается?

1 ответ

Решение

Вы можете прослушать событие WM_KEYUP и только затем выполнить функцию или выполнить функцию один раз и заблокировать ее, пока не получите WM_KEYUP,

Другие вопросы по тегам