Показать сообщение отдельно

  #6  
Старый 25.12.2016, 20:57
iAmerican
Постоянный
Регистрация: 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. делал как то без времени , когда запаривался по поводу этого вопроса , но так как все свои сурсы проебал , не помню уже.
 
Ответить с цитированием