 |

09.06.2022, 20:26
|
|
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами:
4714653
Репутация:
98
|
|
Хочу поймать VK_SHIFT в хуке WndProc, но как я понимаю в комбинации с другой клавишей, например шифт+1 сгенерирует событие восклицательного знака, а не шифта или единицы. Есть ли способ именно в WndProc узнать, что был нажат именно VK_SHIFT даже если они был нажат в комбинации с другой клавишей?
|
|
|

03.02.2023, 08:09
|
|
Познающий
Регистрация: 24.05.2019
Сообщений: 34
С нами:
3670669
Репутация:
73
|
|
Этот код сначала проверяет, нажата ли клавиша 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
}
|
|
|

03.02.2023, 10:41
|
|
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами:
4714653
Репутация:
98
|
|
Сообщение от 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
}
Проверял? На сколько мне подсказывает память там будет восклицательный знак, а не единичка.
|
|
|

03.02.2023, 13:02
|
|
Познающий
Регистрация: 24.05.2019
Сообщений: 34
С нами:
3670669
Репутация:
73
|
|
Сообщение от Ya Zaregalsya
Проверял? На сколько мне подсказывает память там будет восклицательный знак, а не единичка.
Только что проверил - действительно выводит 1
|
|
|

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

03.02.2023, 15:01
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
Сообщение от 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
|
|
|
|
 |
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|