Najlepszy sposób osiągnięcia hotkey'a

dział ogólny

Najlepszy sposób osiągnięcia hotkey'a

Nowy postprzez Chlorek » czwartek, 22 grudnia 2011, 22:20

Witam. Tym razem przyszło mi się zmierzyć z hotkey'ami. Na ogół wydaje się nie być to zbytnim problemem, funkcja GetAsyncKeyState, trochę funkcji warunkowych w nieskończonej pętli. Jednak naszedł mnie tu problem, funkcja GetAsyncKeyState zwraca stan klawisza podanego jako parametr, jednak w pętli wykonuje się to sprawdzenie wiele razy w ciągu sekundy. Oznacza to, że przytrzymanie klawisza przez nawet bardzo krótki czas spowoduje wielokrotne wykonanie poleceń po wciśnięciu tego to przycisku. I teraz mam do was pytanie, jak można zrobić hotkey który wykryje naciśnięcie przycisku tylko w momencie jego pierwszego kliknięcia, nie zatrzyma on pętli, oraz zadziała nawet gdy program jest nieaktywny bądź nie posiada żadnego okna. Program który chcę napisać jest czymś w rodzaju specjalnego menadżera, którym można zarządzać wyłącznie poprzez hotkey'e.
Myślałem też by stworzyć wiele wątków (aktualnie posiadam dwa) dla każdego przycisku z osobna i w momencie wciśnięcia któregoś z przycisków byłby prosty "if" oczekujący na puszczenie przycisku po czym dopiero pętla sprawdzająca przycisk by się znowu uruchamiała. To oczywiście pożerałoby dużo zasobów i nie byłoby ekonomiczne. Szukałem dużo w google jednak wszystkie metody jakie znalazłem albo wymagały aktywnego okna, albo zatrzymywały mi pętlę do czasu puszczenia przycisku itd itd itd. Tak więc bardzo proszę was o pomoc, gdyż jest to dla mnie dość ważna sprawa.
Kevin Mitnick - łamacz ludzi, nie haseł.
Najlepszy sposób nauki c++... pisać, pisać, pisać, pisać i jeszcze raz pisać!
Avatar użytkownika
Chlorek
Bladawiec
Bladawiec
 
Posty: 41
Dołączył(a): czwartek, 6 stycznia 2011, 20:20
Lokalizacja: Tu i tam
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Linux Macpup & Win XP Prof & Linux SlackWare & Linux Ubuntu
Kompilator: Dev-C++ v4.9.9.2 (mingw 3.4.2); Code::Blocks v10.05 (mingw najnowsze)
SKYPE: chlorekcl
    Windows XPFirefox

Re: Najlepszy sposób osiągnięcia hotkey'a

Nowy postprzez Corvis » czwartek, 22 grudnia 2011, 23:56

"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House

Za ten post autor Corvis otrzymał podziękowanie od:
Chlorek
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Najlepszy sposób osiągnięcia hotkey'a

Nowy postprzez Chlorek » piÄ…tek, 23 grudnia 2011, 00:32

Z tego co wyczytałem RegisterHotKey powinien się nadawać dla mojego programu. A opis na msdn wygląda fantastycznie, można ustawić czy ma akceptować repeat'y i tym podobne. Dziękuję Ci za te linki, szkoda że wcześniej na nie nie trafiłem, zaoszczędził bym sporo czasu.
Kevin Mitnick - łamacz ludzi, nie haseł.
Najlepszy sposób nauki c++... pisać, pisać, pisać, pisać i jeszcze raz pisać!
Avatar użytkownika
Chlorek
Bladawiec
Bladawiec
 
Posty: 41
Dołączył(a): czwartek, 6 stycznia 2011, 20:20
Lokalizacja: Tu i tam
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Linux Macpup & Win XP Prof & Linux SlackWare & Linux Ubuntu
Kompilator: Dev-C++ v4.9.9.2 (mingw 3.4.2); Code::Blocks v10.05 (mingw najnowsze)
SKYPE: chlorekcl
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości