
25.12.2016, 20:57
|
|
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами:
6438231
Репутация:
133
|
|
Сообщение от p1cador
Как проверить кнопку на однократное нажатие?
Желательно без огромных хуков клавиатуры.
Для работы с кнопками можно использовать метод GetAsyncKeyState(Байт_код), но с ней иногда бывают проблеммы(залипание, фантомное срабатывание иногда просто не действует), поэтому опишем свою функцию.
Прототип:
C++:
Код:
BOOL
State_Key
(
int
Key
,
DWORD dwTimeOut
)
;
Key - байт код клавиши
dwTimeOut - время до возможности повторного действия в Мсек(не совсем точное определение)
Определяем структуру.
C++:
Код:
static
struct
_Keys
{
bool
bPressed
;
DWORD dwStartTime
;
}
kPressingKeys
[
256
]
;
функа :
C++:
Код:
BOOL
State_Key
(
int
Key
,
DWORD dwTimeOut
)
{
if
(
HIWORD
(
GetKeyState
(
Key
)
)
)
{
if
(
!
kPressingKeys
[
Key
]
.
bPressed
||
(
kPressingKeys
[
Key
]
.
dwStartTime
&&
(
kPressingKeys
[
Key
]
.
dwStartTime
+
dwTimeOut
)
NULL
)
kPressingKeys
[
Key
]
.
dwStartTime
=
GetTickCount
(
)
;
return
TRUE
;
}
}
else
kPressingKeys
[
Key
]
.
bPressed
=
FALSE
;
return
FALSE
;
}
Ставишь в функе время, секунд 15 , думаю хватит.
Автор "крайслер"
Взято с zhyk.ru.
p.s. делал как то без времени , когда запаривался по поводу этого вопроса , но так как все свои сурсы проебал , не помню уже.
|
|
|