2011-12-24 20 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 2011-12-24 19:09:12

回答

1

的切換參數告訴你鍵是什麼Ctrl鍵Alt鍵的組合了。不過,它並沒有區分左側和右側。爲此,您必須使用GetKeyState API函數。

當它出現類似的代碼時,向右移位右鍵,但在事件中。設置一個模塊級別的布爾值來表示該鍵已關閉。 (請注意,您必須檢查KeyCode是16,你會得到兩種shift鍵。)

然後,在Form_KeyUp情況下,如果你的布爾說,關鍵是下跌的,但GetKeyState返回負數字表明它實際上是,你知道鑰匙已經被釋放。確保您現在也重置表單級布爾值。

+0

這幾乎成功。除了在我的應用程序中,左右shift鍵可以做不同的事情。我如何知道哪些已經發布?有可能這兩個人都可能一個接一個地沮喪,並以任何順序發佈。 – 2011-12-28 00:54:20

+0

GetKeyState的參數是您感興趣的* virtual *鍵,並且右側和左側的shift鍵是不同的虛擬鍵。只要你通過'VK_RSHIFT'(0xA1),你就會得到那個鍵的狀態。你會傳遞'VK_LSHIFT'(0xA0)來檢查左移鍵。我在這裏找到了一個鍵碼列表:http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx – JeffK 2011-12-28 04:43:19