매크로/모듈(Module)

Caps Lock 전환

고추탄 2025. 5. 9. 14:37

Const VK_CAPITAL As Long = &H14
Const KEYEVENTF_KEYUP As Long = &H2

#If VBA7 Then
    
    Private Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

#Else

    Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

#End If


Private Sub UserForm_Initialize()
  
  Dim isCapsLockOn As Boolean
  
 'Caps Lock 키를 전환
 '주의 SendKeys는 간단하지만, 일부 환경에서는 예상대로 작동하지 않을 수 있습니다
 'SendKeys "{CAPSLOCK}", True

 'Windows API 사용
 'Caps Lock 상태 확인
  isCapsLockOn = (GetKeyState(VK_CAPITAL) And 1) <> 0
    
 'Caps Lock 상태 전환
  If isCapsLockOn Then
    'Caps Lock이 켜져 있으면 끔
    'keybd_event VK_CAPITAL, 0, 0, 0
    'keybd_event VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0
  Else
    'Caps Lock이 꺼져 있으면 켬
     keybd_event VK_CAPITAL, 0, 0, 0
     keybd_event VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0
  End If
  
End Sub

LIST