|
'==========================================================================
' 아래 코드는 엑사모의 황기성(님)의 코드입니다.
' 64비트를 사용하셔서 Error가 발생 되면
' 아래 링크 참조해서 적용해 보세요.
' https://msdn.microsoft.com/ko-kr/library/office/ee691831
' 수고 하세요...!
'==========================================================================
Option Explicit
' 특정 키의 현재 상탤를 되돌리는 API 함수
' 키가 눌렸는지, 떼어져 있는지, 토글 상태인지를 검사한다
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
'ScrollLock 키 상수는 VBA에서 제공하지 않으므로 사용자 정의
Private Const vbKeyScrollLock = 145
Sub dhMain()
Dim strQ As String
'해당 키가 눌려 있는지 확인하기 위해 키코드 상수를 이용한다
'Print
strQ = "Shift 키 : " & dhGetKeyState(vbKeyShift)
strQ = strQ & vbCr & "Esc 키 : " & dhGetKeyState(vbKeyEscape)
strQ = strQ & vbCr & "Ctrl 키 : " & dhGetKeyState(vbKeyControl)
strQ = strQ & vbCr & "Alt 키 : " & dhGetKeyState(vbKeyMenu)
strQ = strQ & vbCr & "ScrollLock 키 : " & dhGetKeyState(vbKeyScrollLock)
strQ = strQ & vbCr & "CapsLock 키 : " & dhGetKeyState(vbKeyCapital)
strQ = strQ & vbCr & "Num Lock키 : " & dhGetKeyState(vbKeyNumlock)
' strQ = strQ & vbCr & "F1 : " & dhGetKeyState(vbKeyF1)
MsgBox strQ, vbInformation
End Sub
Function dhGetKeyState(ByVal lngKey As Long) As Boolean
Dim lngRtn As Long
lngRtn = GetKeyState(lngKey)
'해당 키가 눌려 있는 상태인지 여부를 확인
Select Case lngKey
'토글키의 경우 첫번째 비트값을 찾는다
Case vbKeyCapital, vbKeyNumlock, vbKeyScrollLock
dhGetKeyState = CBool(GetKeyState(lngKey) And 1)
Case Else
dhGetKeyState = CBool(GetKeyState(lngKey) And &H8000)
'CBool(GetKeyState(lngKey) <0)
End Select
End Function |
|