2011-12-24 4 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 함수를 사용해야합니다.

비슷한 코드로 비슷한 코드로 이동했지만 이벤트에서 오른쪽 Shift 키를 트랩합니다. 키가 현재 작동 중임을 나타 내기 위해 모듈 수준의 부울을 설정합니다. 당신의 부울 키가 다운 말합니다 경우 Form_KeyUp 경우에,

다음 (. 당신이 KeyCode 당신이 중 하나를 시프트 키를 얻을 것이다 (16),인지 확인해야합니다)하지만, 부정적인를 GetKeyState 반환 숫자가 실제로 올라 갔음을 나타내면 키가 해제되었음을 알 수 있습니다. 이 때 폼 레벨 부울을 다시 설정해야합니다.

+0

거의 작동합니다. 내 응용 프로그램을 제외하고, 왼쪽 및 오른쪽 시프트 키는 다른 일을합니다. 어떤 자료가 공개되었는지 어떻게 알 수 있습니까? 두 사람 모두 하나씩 우울해 질 수도 있고 어떤 순서로도 풀려 났을 수도 있습니다. –

+0

GetKeyState에 대한 인수는 관심있는 * 가상 * 키이고, 오른쪽 및 왼쪽 Shift 키는 다른 가상 키입니다. 'VK_RSHIFT' (0xA1)을 넘기 만하면 해당 키의 상태 만 알 수 있습니다. 왼쪽 시프트 키를 검사하기 위해'VK_LSHIFT' (0xA0)을 전달합니다. 여기에 키 코드 목록이 있습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx – JeffK

관련 문제