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


person user779444    schedule 18.01.2012    source источник
comment
Связанный: stackoverflow.com/questions/4127270/   -  person Mechanical snail    schedule 24.09.2012


Ответы (1)


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

person Christoph Fink    schedule 18.01.2012