ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Как поймать событие VK_SHIFT если он нажался в комбинации с другой клавишей? (https://forum.antichat.xyz/showthread.php?t=1436070)

Ya Zaregalsya 09.06.2022 20:26

Хочу поймать VK_SHIFT в хуке WndProc, но как я понимаю в комбинации с другой клавишей, например шифт+1 сгенерирует событие восклицательного знака, а не шифта или единицы. Есть ли способ именно в WndProc узнать, что был нажат именно VK_SHIFT даже если они был нажат в комбинации с другой клавишей?

uqowivad 03.02.2023 08:09

Этот код сначала проверяет, нажата ли клавиша VK_SHIFT

Затем проверяет параметр wParam, чтобы узнать, какая другая клавиша была нажата в сочетании с VK_SHIFT.

c++:





Код:

LRESULT CALLBACK
WndProc
(
HWND hWnd
,
UINT message
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
message
==
WM_KEYDOWN
)
{
if
(
GetKeyState
(
VK_SHIFT
)
&
0x8000
)
{
// VK_SHIFT Only
if
(
wParam
==
'1'
)
{
// VK_SHIFT + 1
}
else
if
(
wParam
==
'2'
)
{
// VK_SHIFT + 2
}
// code
}
}
// code
}


Ya Zaregalsya 03.02.2023 10:41

Цитата:

Сообщение от uqowivad

Этот код сначала проверяет, нажата ли клавиша VK_SHIFT
Затем проверяет параметр wParam, чтобы узнать, какая другая клавиша была нажата в сочетании с VK_SHIFT.

c++:





Код:

LRESULT CALLBACK
WndProc
(
HWND hWnd
,
UINT message
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
message
==
WM_KEYDOWN
)
{
if
(
GetKeyState
(
VK_SHIFT
)
&
0x8000
)
{
// VK_SHIFT Only
if
(
wParam
==
'1'
)
{
// VK_SHIFT + 1
}
else
if
(
wParam
==
'2'
)
{
// VK_SHIFT + 2
}
// code
}
}
// code
}



Проверял? На сколько мне подсказывает память там будет восклицательный знак, а не единичка.

uqowivad 03.02.2023 13:02

Цитата:

Сообщение от Ya Zaregalsya

Проверял? На сколько мне подсказывает память там будет восклицательный знак, а не единичка.

Только что проверил - действительно выводит 1

Ya Zaregalsya 03.02.2023 14:52

Цитата:

Сообщение от uqowivad

Только что проверил - действительно выводит 1

Так, вопрос старенький, чёто туплю. Суть вопроса был в чём, как поймать событие вк шифт если при этом нажаты другие клавиши. Т.е. нужен именно ВК ШИФТ, а не единички или восклицательные знаки, и желательно поймать его в кач-ве события, проблема в том, что в комбинации с цифрами это уже будет не ВК_ШИФТ, а соответствующий символ !"№;%:?*()_+. Костыльное решение проблемы это юзать функи по типу GetKeyState или IsKeyJustPressed в СФ, как я собстно и сделал, но красивее и надёжнее это было бы реализовать именно событием, чтобы ловить как нажатие, так и отжатие шифта.

Musaigen 03.02.2023 15:01

Цитата:

Сообщение от Ya Zaregalsya

Так, вопрос старенький, чёто туплю. Суть вопроса был в чём, как поймать событие вк шифт если при этом нажаты другие клавиши. Т.е. нужен именно ВК ШИФТ, а не единички или восклицательные знаки, и желательно поймать его в кач-ве события, проблема в том, что в комбинации с цифрами это уже будет не ВК_ШИФТ, а соответствующий символ !"№;%:?*()_+. Костыльное решение проблемы это юзать функи по типу GetKeyState или IsKeyJustPressed в СФ, как я собстно и сделал, но красивее и надёжнее это было бы реализовать именно событием, чтобы ловить как нажатие, так и отжатие шифта.

mod_sa/src/keyhook.cpp at dc9b3b13599a8b6325e566f567b5391b0b2a6dc8 · BlastHackNet/mod_sa

Multi-purpose cheat tool for GTA San Andreas and SA-MP - BlastHackNet/mod_sa

github.com


Время: 18:44