Как поймать событие VK_SHIFT если он нажался в комбинации с другой клавишей?

Ya Zaregalsya

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

uqowivad

Известный
11
2
Этот код сначала проверяет, нажата ли клавиша 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

Известный
Автор темы
386
134
Этот код сначала проверяет, нажата ли клавиша 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

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

Musaigen

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