| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 
 |  
   1. ' Declare Type for API call:
   2.       Private Type OSVERSIONINFO
   3.         dwOSVersionInfoSize As Long
   4.         dwMajorVersion As Long
   5.         dwMinorVersion As Long
   6.         dwBuildNumber As Long
   7.         dwPlatformId As Long
   8.         szCSDVersion As String * 128   '  Maintenance string for PSS usage
   9.       End Type
  10.
  11.       ' API declarations:
  12.
  13.       Private Declare Function GetVersionEx Lib "kernel32" _
  14.          Alias "GetVersionExA" _
  15.          (lpVersionInformation As OSVERSIONINFO) As Long
  16.
  17.       Private Declare Sub keybd_event Lib "user32" _
  18.          (ByVal bVk As Byte, _
  19.           ByVal bScan As Byte, _
  20.           ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
  21.
  22.       Private Declare Function GetKeyboardState Lib "user32" _
  23.          (pbKeyState As Byte) As Long
  24.
  25.       Private Declare Function SetKeyboardState Lib "user32" _
  26.          (lppbKeyState As Byte) As Long
  27.
  28.       ' Constant declarations:
  29.       Const VK_NUMLOCK = &H90
  30.       Const VK_SCROLL = &H91
  31.       Const VK_CAPITAL = &H14
  32.       Const KEYEVENTF_EXTENDEDKEY = &H1
  33.       Const KEYEVENTF_KEYUP = &H2
  34.       Const VER_PLATFORM_WIN32_NT = 2
  35.       Const VER_PLATFORM_WIN32_WINDOWS = 1
  36.
  37. Private Sub Command1_Click()
  38.       Dim o As OSVERSIONINFO
  39.       Dim NumLockState As Boolean
  40.       Dim ScrollLockState As Boolean
  41.       Dim CapsLockState As Boolean
  42.
  43.       o.dwOSVersionInfoSize = Len(o)
  44.       GetVersionEx o
  45.       Dim keys(0 To 255) As Byte
  46.       GetKeyboardState keys(0)
  47.
  48.       ' NumLock handling:
  49.       NumLockState = keys(VK_NUMLOCK)
  50.       If NumLockState <> True Then    'Turn numlock on
  51.         If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=== Win95/98
  52.
  53.           keys(VK_NUMLOCK) = 1
  54.           SetKeyboardState keys(0)
  55.         ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=== WinNT
  56.         'Simulate Key Press
  57.           keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
  58.         'Simulate Key Release
  59.           keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY _
  60.              Or KEYEVENTF_KEYUP, 0
  61.         End If
  62.       End If
  63.
  64.       ' CapsLock handling:
  65.       CapsLockState = keys(VK_CAPITAL)
  66.       If CapsLockState <> True Then    'Turn capslock on
  67.         If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=== Win95/98
  68.           keys(VK_CAPITAL) = 1
  69.           SetKeyboardState keys(0)
  70.         ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=== WinNT
  71.         'Simulate Key Press
  72.           keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
  73.         'Simulate Key Release
  74.           keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY _
  75.              Or KEYEVENTF_KEYUP, 0
  76.         End If
  77.       End If
  78.
  79.       ' ScrollLock handling:
  80.       ScrollLockState = keys(VK_SCROLL)
  81.       If ScrollLockState <> True Then    'Turn Scroll lock on
  82.         If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=== Win95/98
  83.           keys(VK_SCROLL) = 1
  84.           SetKeyboardState keys(0)
  85.         ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=== WinNT
  86.         'Simulate Key Press
  87.           keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
  88.         'Simulate Key Release
  89.           keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY _
  90.             Or KEYEVENTF_KEYUP, 0
  91.         End If
  92.       End If
  93.     End Sub | 
Partager