2012-01-18 3 views
0

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

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, которое указывает, что кнопка удерживается?

+0

Связанные: http://stackoverflow.com/questions/4127270/c-sharp-how-to-loop-while-mouse-button-is-held-down –

ответ

3

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