Разберете дали даден бутон е задържан с помощта на Windows Messages

Имам програма, която използва 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