2011-12-24 9 views
0

VB6のフォームで右シフトキーを離したときを検出したい。私は次のコードを持っています:フォーム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 

それ以外は動作しません。イベントが発生するまでにキーは解放され、GetKeyState API関数は0を返します。

解決策は何ですか?

+2

「Shift」パラメータにはどのような値が含まれていますか? :) – GolezTrol

答えて

1

シフトパラメータを使用するには、キーがダウンしているシフトCtrlキー、そしてAltキーのどのような組み合わせを伝えます。しかし、それは左と右を区別しない。そのためには、GetKeyState API関数を使用する必要があります。

右シフトキーは、同じコードで持ち歩いたときのものですが、イベントにトラップします。キーが現在停止していることを示すために、モジュールレベルのブール値を設定します。 (あなたはKeyCodeあなたはどちらかのShiftキーのために買ってあげる16、であることを確認する必要がありますので注意してください。)

を次に、Form_KeyUpイベントでは、あなたのブール値は、キーがダウンしていると言うが、負のGetKeyState返す場合それが実際にアップしていることを示す数字は、そのキーがリリースされたことを知っています。このときもフォームレベルのブール値をリセットするようにしてください。

+0

それはほとんど動作します。私のアプリケーションでは、左右のシフトキーは異なることをしています。どのようにリリースされたのかはどのようにわかりますか?両方がうつ伏せになっていて、どんな順序でもリリースされている可能性があります。 –

+0

GetKeyStateの引数はあなたが興味を持っている* virtual *キーで、右と左のシフトキーは異なる仮想キーです。 'VK_RSHIFT'(0xA1)を渡す限り、そのキーの状態だけを取得します。 'VK_LSHIFT'(0xA0)を渡して左シフトキーを確認します。ここにキーコードの一覧があります。http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx – JeffK

関連する問題