Events 检测表单KeyUp事件中的右移键

Events 检测表单KeyUp事件中的右移键,events,vb6,keyboard,Events,Vb6,Keyboard,我想在VB6中检测何时在窗体上释放右shift键。我有以下代码: 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

我想在VB6中检测何时在窗体上释放右shift键。我有以下代码:

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
Private将函数GetKeyState Lib“user32”(ByVal nVirtKey长度)声明为整数
私有子表单_KeyUp(KeyCode为整数,Shift为整数)
如果GetKeyState(VK_RSHIFT)<0,则
MsgBox“右移已释放”
如果结束
端接头
除了,它不起作用。触发事件时,密钥已释放,GetKeyState API函数返回0


解决方案是什么?

Shift参数告诉您按住Shift、Ctrl和Alt键的组合。不过,它并没有区分左和右。为此,必须使用
GetKeyState
API函数

当右shift键按下时,其代码与您的代码类似,但在
Form_KeyDown
事件中。设置一个模块级布尔值以指示键现在已关闭。(请注意,您必须检查
KeyCode
是否为16,这将为任一shift键获得。)


然后,在
Form_KeyUp
事件中,如果布尔值表示该键已关闭,但
GetKeyState
返回一个负数,表示该键实际已打开,则您知道该键已被释放。确保此时也重置了表单级布尔值。

Shift
参数包含什么值?:)这几乎奏效了。除了在我的应用程序中,左键和右键做不同的事情。我怎么知道哪个已经发布了?有可能这两个键都被一个接一个地按下并以任何顺序释放。GetKeyState的参数是您感兴趣的虚拟键,而右键和左键是不同的虚拟键。只要您通过
VK\u RSHIFT
(0xA1),您将只获得该键的状态。您需要通过
VK_LSHIFT
(0xA0)来检查左换档键。我在这里找到了一个键码列表: