2011-12-24 2 views
0

Я хочу определить, когда правая сменная клавиша высвобождается по форме в VB6. У меня есть следующий код:Обнаружение правой клавиши Shift в событии KeyUp формы

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer 

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) 
    If GetKeyState(VK_RSHIFT) < 0 Then 
     MsgBox "Right Shift Released" 
    End If 
End Sub 

За исключением, он не работает. К моменту запуска события ключ был освобожден, и функция API GetKeyState возвращает 0.

Какое решение?

+2

Какое значение имеет параметр 'Shift'? :) – GolezTrol

ответ

1

Параметр Сдвиг говорит вам, что сочетание сдвига, Ctrl и Alt клавиши вниз. Однако он не проводит различия между левым и правым. Для этого вам необходимо использовать функцию API GetKeyState.

Ловушка правая сменная клавиша, когда она идет с похожим кодом, что у вас есть, но в событии . Установите логический уровень на уровне модуля, чтобы указать, что ключ теперь выключен. (Обратите внимание, что вы должны проверить, что KeyCode 16, который вы получите либо для смены ключа.)

Тогда, в Form_KeyUp случае, если логическое значение говорит, что ключ вниз, но GetKeyState возвращает отрицательное номер, указывающий, что он на самом деле вверх, вы знаете, что ключ был выпущен. Убедитесь, что вы также сбросили булевский уровень уровня.

+0

Это почти работает. За исключением того, что в моем приложении левая и правая клавиши сдвига делают разные вещи. Как узнать, что было выпущено? Возможно, что оба могут быть подавлены один за другим и выпущены в любом порядке. –

+0

Аргумент для GetKeyState - это * виртуальный * ключ, который вас интересует, а правые и левые клавиши сдвига - разные виртуальные ключи. Пока вы передаете 'VK_RSHIFT' (0xA1), вы получите только состояние этого ключа. Вы должны передать 'VK_LSHIFT' (0xA0), чтобы проверить левую клавишу shift. Я нашел список кодов клавиш здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx – JeffK

Смежные вопросы