<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: in VBA Forum</title>
    <link>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351932#M75043</link>
    <description>Well here is the code I use.  Somone else wrote it.  And I can't remember&lt;BR /&gt;
who.  One of the problems with this code is that the Office Shortcut Bar&lt;BR /&gt;
does not work correct.  You have to make AutoCAD not active then you can&lt;BR /&gt;
click a button.  And after more of look (still not line for line compare)&lt;BR /&gt;
the 2 code look more different.  If you look for this post there is more&lt;BR /&gt;
info on the code I'm giving you: "AutoCAD 2002 activate/deactivate" posted&lt;BR /&gt;
on Feb. 25, 2002.&lt;BR /&gt;
&lt;BR /&gt;
Public WithEvents ACADApp As AcadApplication&lt;BR /&gt;
&lt;BR /&gt;
Private Declare Sub keybd_event Lib "user32" _&lt;BR /&gt;
         (ByVal bVk As Byte, _&lt;BR /&gt;
          ByVal bScan As Byte, _&lt;BR /&gt;
          ByVal dwFlags As Long, ByVal dwExtraInfo As Long)&lt;BR /&gt;
&lt;BR /&gt;
Private Declare Function GetKeyboardState Lib "user32" _&lt;BR /&gt;
         (pbKeyState As Byte) As Long&lt;BR /&gt;
&lt;BR /&gt;
Private Declare Function SetKeyboardState Lib "user32" _&lt;BR /&gt;
         (lppbKeyState As Byte) As Long&lt;BR /&gt;
&lt;BR /&gt;
Const VK_CAPITAL = &amp;amp;H14&lt;BR /&gt;
      Const KEYEVENTF_EXTENDEDKEY = &amp;amp;H1&lt;BR /&gt;
      Const KEYEVENTF_KEYUP = &amp;amp;H2&lt;BR /&gt;
&lt;BR /&gt;
Dim keys(0 To 255) As Byte&lt;BR /&gt;
&lt;BR /&gt;
Sub ACADStartup()&lt;BR /&gt;
Set ACADApp = GetObject(, "AutoCAD.Application")&lt;BR /&gt;
Call ACADApp_AppActivate&lt;BR /&gt;
End Sub&lt;BR /&gt;
&lt;BR /&gt;
Private Sub ACADApp_AppActivate()&lt;BR /&gt;
GetKeyboardState keys(0)&lt;BR /&gt;
keybd_event VK_CAPITAL, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY Or 0, 0&lt;BR /&gt;
keybd_event VK_CAPITAL, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY _&lt;BR /&gt;
    Or KEYEVENTF_KEYUP, 0&lt;BR /&gt;
End Sub&lt;BR /&gt;
&lt;BR /&gt;
Private Sub ACADApp_AppDeactivate()&lt;BR /&gt;
GetKeyboardState keys(0)&lt;BR /&gt;
keybd_event VK_CAPITAL, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY Or 0, 0&lt;BR /&gt;
keybd_event VK_CAPITAL, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY _&lt;BR /&gt;
    Or KEYEVENTF_KEYUP, 0&lt;BR /&gt;
End Sub&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
--&lt;BR /&gt;
&lt;BR /&gt;
Dave Gardner&lt;BR /&gt;
"Bobby C. Jones" &lt;BOBBYJ&gt; wrote in message&lt;BR /&gt;
news:A19CCBAA1FDB37984BC0DE56DF909E20@in.WebX.maYIadrTaRb...&lt;BR /&gt;
&amp;gt; Ok...This is what I've come up with so far.  I don't have an XP box to&lt;BR /&gt;
test&lt;BR /&gt;
&amp;gt; this on, so until I can research a little further or until someone says&lt;BR /&gt;
&amp;gt; otherwise I'll just take David's word that this works for XP.&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; 'Example of class usage&lt;BR /&gt;
&amp;gt; Public Sub CKeyboard_Example()&lt;BR /&gt;
&amp;gt;     Dim oKeyboard as CKeyboard&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     Set oKeyboard = New CKeyboard&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     'Turns on Capslock key&lt;BR /&gt;
&amp;gt;     oKeyboard.capsOn = True&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     If oKeyboard.capsOn Then&lt;BR /&gt;
&amp;gt;         MsgBox "Capslock is on"&lt;BR /&gt;
&amp;gt;       Else&lt;BR /&gt;
&amp;gt;         MsgBox "Capslock is off"&lt;BR /&gt;
&amp;gt;     End If&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     Set oKeyboard = Nothing&lt;BR /&gt;
&amp;gt; End Sub&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; VERSION 1.0 CLASS&lt;BR /&gt;
&amp;gt; BEGIN&lt;BR /&gt;
&amp;gt;   MultiUse = -1  'True&lt;BR /&gt;
&amp;gt; END&lt;BR /&gt;
&amp;gt; Attribute VB_Name = "CKeyboard"&lt;BR /&gt;
&amp;gt; Attribute VB_GlobalNameSpace = False&lt;BR /&gt;
&amp;gt; Attribute VB_Creatable = False&lt;BR /&gt;
&amp;gt; Attribute VB_PredeclaredId = False&lt;BR /&gt;
&amp;gt; Attribute VB_Exposed = False&lt;BR /&gt;
&amp;gt; Option Explicit&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Const VK_CAPITAL = &amp;amp;H14&lt;BR /&gt;
&amp;gt; Private Const VK_NUMLOCK = &amp;amp;H90&lt;BR /&gt;
&amp;gt; Private Const VK_SCROLL = &amp;amp;H91&lt;BR /&gt;
&amp;gt; Private Const KEYEVENTF_EXTENDEDKEY = &amp;amp;H1&lt;BR /&gt;
&amp;gt; Private Const KEYEVENTF_KEYUP = &amp;amp;H2&lt;BR /&gt;
&amp;gt; Private Const VER_PLATFORM_WIN32_NT = 2&lt;BR /&gt;
&amp;gt; Private Const VER_PLATFORM_WIN32_WINDOWS = 1&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Type KeyboardBytes&lt;BR /&gt;
&amp;gt;     kbByte(0 To 255) As Byte&lt;BR /&gt;
&amp;gt; End Type&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Type OSVERSIONINFO&lt;BR /&gt;
&amp;gt;     dwOSVerInfoSize As Long&lt;BR /&gt;
&amp;gt;     dwMajorVer As Long&lt;BR /&gt;
&amp;gt;     dwMinorVer As Long&lt;BR /&gt;
&amp;gt;     dwBuildNumber As Long&lt;BR /&gt;
&amp;gt;     dwPlatformID As Long&lt;BR /&gt;
&amp;gt;     szCSDVer As String * 128&lt;BR /&gt;
&amp;gt; End Type&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Declare Function GetVersionEX Lib "kernel32" _&lt;BR /&gt;
&amp;gt;     Alias "GetVersionExA" _&lt;BR /&gt;
&amp;gt;     (lpVersionInformation As OSVERSIONINFO) As Long&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Declare Sub keybd_event Lib "user32" _&lt;BR /&gt;
&amp;gt;     (ByVal bVk As Byte, _&lt;BR /&gt;
&amp;gt;      ByVal bScan As Byte, _&lt;BR /&gt;
&amp;gt;      ByVal dwFlags As Long, _&lt;BR /&gt;
&amp;gt;      ByVal dwExtraInfo As Long)&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Declare Function GetKeyboardState Lib "user32" (keys As&lt;BR /&gt;
&amp;gt; KeyboardBytes) As Long&lt;BR /&gt;
&amp;gt; Private Declare Function SetKeyboardState Lib "user32" (keys As&lt;BR /&gt;
&amp;gt; KeyboardBytes) As Long&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private keys As KeyboardBytes&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * * * *&lt;BR /&gt;
&amp;gt; 'Public Members&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * * * *&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Get capsOn() As Boolean&lt;BR /&gt;
&amp;gt;    capsOn = GetKeyStatus(VK_CAPITAL)&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Let capsOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt;    setKey VK_CAPITAL, bValue&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Get NumLockOn() As Boolean&lt;BR /&gt;
&amp;gt;    NumLockOn = GetKeyStatus(VK_NUMLOCK)&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Let NumLockOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt;    setKey VK_NUMLOCK, bValue&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Get ScrollOn() As Boolean&lt;BR /&gt;
&amp;gt;    ScrollOn = GetKeyStatus(VK_SCROLL)&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Let ScrollOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt;    setKey VK_SCROLL, bValue&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * * * *&lt;BR /&gt;
&amp;gt; 'Private functions&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * * * *&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Sub setKey(vkKey As Long, onVal As Boolean)&lt;BR /&gt;
&amp;gt;     Dim OS As OSVERSIONINFO&lt;BR /&gt;
&amp;gt;     Dim keyState As Boolean&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     'get OS info&lt;BR /&gt;
&amp;gt;     OS.dwOSVerInfoSize = Len(OS)&lt;BR /&gt;
&amp;gt;     GetVersionEX OS&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     'Get the keyboard state&lt;BR /&gt;
&amp;gt;     GetKeyboardState keys&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     'Get the key state&lt;BR /&gt;
&amp;gt;     keyState = keys.kbByte(vkKey)&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     'Change a key&lt;BR /&gt;
&amp;gt;     If keyState &amp;lt;&amp;gt; onVal Then&lt;BR /&gt;
&amp;gt;         If OS.dwPlatformID = VER_PLATFORM_WIN32_NT Then&lt;BR /&gt;
&amp;gt;             'simulate key press&lt;BR /&gt;
&amp;gt;             keybd_event vkKey, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY Or 0, 0&lt;BR /&gt;
&amp;gt;             'simulate key release&lt;BR /&gt;
&amp;gt;             keybd_event vkKey, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY Or&lt;BR /&gt;
&amp;gt; KEYEVENTF_KEYUP, 0&lt;BR /&gt;
&amp;gt;           Else&lt;BR /&gt;
&amp;gt;             keys.kbByte(vkKey) = Abs(onVal)&lt;BR /&gt;
&amp;gt;             SetKeyboardState keys&lt;BR /&gt;
&amp;gt;         End If&lt;BR /&gt;
&amp;gt;     End If&lt;BR /&gt;
&amp;gt; End Sub&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Function GetKeyStatus(vkKey As Long) As Boolean&lt;BR /&gt;
&amp;gt;     'get the keyboard state&lt;BR /&gt;
&amp;gt;     GetKeyboardState keys&lt;BR /&gt;
&amp;gt;     'get and return the key state&lt;BR /&gt;
&amp;gt;     GetKeyStatus = keys.kbByte(vkKey)&lt;BR /&gt;
&amp;gt; End Function&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; --&lt;BR /&gt;
&amp;gt; Bobby C. Jones&lt;BR /&gt;
&amp;gt; http://www.acadx.com&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;/BOBBYJ&gt;</description>
    <pubDate>Mon, 15 Apr 2002 04:41:17 GMT</pubDate>
    <dc:creator>Anonymous</dc:creator>
    <dc:date>2002-04-15T04:41:17Z</dc:date>
    <item>
      <title>Capslock</title>
      <link>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351927#M75038</link>
      <description>Why doesn't this stinking code toggle the stupid capslock light on the&lt;BR /&gt;
keyboard...it toggles the capslock mode, but not the stupid light!!!  Thanks&lt;BR /&gt;
for your help.&lt;BR /&gt;
&lt;BR /&gt;
'* * * * * * * * * * *&lt;BR /&gt;
'Sample call&lt;BR /&gt;
Public Sub testKB()&lt;BR /&gt;
    Dim oKeyboard As CKeyboard&lt;BR /&gt;
    Set oKeyboard = New CKeyboard&lt;BR /&gt;
    oKeyboard.capsOn = False&lt;BR /&gt;
    Set oKeyboard = Nothing&lt;BR /&gt;
End Sub&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
'* * * * * * * * * * *&lt;BR /&gt;
'CKeyboard Class Module&lt;BR /&gt;
Option Explicit&lt;BR /&gt;
&lt;BR /&gt;
Private Const VK_CAPITAL = &amp;amp;H14&lt;BR /&gt;
Private Const VK_NUMLOCK = &amp;amp;H90&lt;BR /&gt;
Private Const VK_SCROLL = &amp;amp;H91&lt;BR /&gt;
&lt;BR /&gt;
Private Type KeyboardBytes&lt;BR /&gt;
    kbByte(0 To 255) As Byte&lt;BR /&gt;
End Type&lt;BR /&gt;
&lt;BR /&gt;
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long)&lt;BR /&gt;
As Long&lt;BR /&gt;
Private Declare Function GetKeyboardState Lib "user32" (kbArray As&lt;BR /&gt;
KeyboardBytes) As Long&lt;BR /&gt;
Private Declare Function SetKeyboardState Lib "user32" (kbArray As&lt;BR /&gt;
KeyboardBytes) As Long&lt;BR /&gt;
&lt;BR /&gt;
Private kbArray As KeyboardBytes&lt;BR /&gt;
&lt;BR /&gt;
Private Sub setKey(vkKey As Long, onVal As Boolean)&lt;BR /&gt;
    'Get the keyboard state&lt;BR /&gt;
    GetKeyboardState kbArray&lt;BR /&gt;
    'Change a key&lt;BR /&gt;
    kbArray.kbByte(vkKey) = Abs(onVal)&lt;BR /&gt;
    SetKeyboardState kbArray&lt;BR /&gt;
End Sub&lt;BR /&gt;
&lt;BR /&gt;
Private Function GetKeyStatus(vkKey As Long) As Boolean&lt;BR /&gt;
    'get the keyboard state&lt;BR /&gt;
    GetKeyboardState kbArray&lt;BR /&gt;
    'get and return the key state&lt;BR /&gt;
    GetKeyStatus = kbArray.kbByte(vkKey)&lt;BR /&gt;
End Function&lt;BR /&gt;
&lt;BR /&gt;
Public Property Get capsOn() As Boolean&lt;BR /&gt;
   capsOn = GetKeyStatus(VK_CAPITAL)&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
Public Property Let capsOn(ByVal bValue As Boolean)&lt;BR /&gt;
   setKey VK_CAPITAL, bValue&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
Public Property Get NumLockOn() As Boolean&lt;BR /&gt;
   capsOn = GetKeyStatus(VK_NUMLOCK)&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
Public Property Let NumLockOn(ByVal bValue As Boolean)&lt;BR /&gt;
   setKey VK_NUMLOCK, bValue&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
Public Property Get ScrollOn() As Boolean&lt;BR /&gt;
   capsOn = GetKeyStatus(VK_SCROLL)&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
Public Property Let ScrollOn(ByVal bValue As Boolean)&lt;BR /&gt;
   setKey VK_SCROLL, bValue&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
'* * * * * * * * * * *&lt;BR /&gt;
'End CKeyboard Class Module&lt;BR /&gt;
'* * * * * * * * * * *&lt;BR /&gt;
&lt;BR /&gt;
--&lt;BR /&gt;
Bobby C. Jones&lt;BR /&gt;
http://www.acadx.com</description>
      <pubDate>Fri, 12 Apr 2002 11:52:17 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351927#M75038</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-04-12T11:52:17Z</dc:date>
    </item>
    <item>
      <title>Re: Capslock</title>
      <link>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351928#M75039</link>
      <description>Windows NT ?&lt;BR /&gt;
&lt;BR /&gt;
Maybe this will help...&lt;BR /&gt;
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q127190&lt;BR /&gt;
&lt;BR /&gt;
Brian D.&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
"Bobby C. Jones" &lt;BOBBYJ&gt; wrote in message&lt;BR /&gt;
news:F1F34B0A58F60488ECE329A052A29749@in.WebX.maYIadrTaRb...&lt;BR /&gt;
&amp;gt; Why doesn't this stinking code toggle the stupid capslock light on the&lt;BR /&gt;
&amp;gt; keyboard...it toggles the capslock mode, but not the stupid light!!!&lt;BR /&gt;
Thanks&lt;BR /&gt;
&amp;gt; for your help.&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; 'Sample call&lt;BR /&gt;
&amp;gt; Public Sub testKB()&lt;BR /&gt;
&amp;gt;     Dim oKeyboard As CKeyboard&lt;BR /&gt;
&amp;gt;     Set oKeyboard = New CKeyboard&lt;BR /&gt;
&amp;gt;     oKeyboard.capsOn = False&lt;BR /&gt;
&amp;gt;     Set oKeyboard = Nothing&lt;BR /&gt;
&amp;gt; End Sub&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; 'CKeyboard Class Module&lt;BR /&gt;
&amp;gt; Option Explicit&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Const VK_CAPITAL = &amp;amp;H14&lt;BR /&gt;
&amp;gt; Private Const VK_NUMLOCK = &amp;amp;H90&lt;BR /&gt;
&amp;gt; Private Const VK_SCROLL = &amp;amp;H91&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Type KeyboardBytes&lt;BR /&gt;
&amp;gt;     kbByte(0 To 255) As Byte&lt;BR /&gt;
&amp;gt; End Type&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long)&lt;BR /&gt;
&amp;gt; As Long&lt;BR /&gt;
&amp;gt; Private Declare Function GetKeyboardState Lib "user32" (kbArray As&lt;BR /&gt;
&amp;gt; KeyboardBytes) As Long&lt;BR /&gt;
&amp;gt; Private Declare Function SetKeyboardState Lib "user32" (kbArray As&lt;BR /&gt;
&amp;gt; KeyboardBytes) As Long&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private kbArray As KeyboardBytes&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Sub setKey(vkKey As Long, onVal As Boolean)&lt;BR /&gt;
&amp;gt;     'Get the keyboard state&lt;BR /&gt;
&amp;gt;     GetKeyboardState kbArray&lt;BR /&gt;
&amp;gt;     'Change a key&lt;BR /&gt;
&amp;gt;     kbArray.kbByte(vkKey) = Abs(onVal)&lt;BR /&gt;
&amp;gt;     SetKeyboardState kbArray&lt;BR /&gt;
&amp;gt; End Sub&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Function GetKeyStatus(vkKey As Long) As Boolean&lt;BR /&gt;
&amp;gt;     'get the keyboard state&lt;BR /&gt;
&amp;gt;     GetKeyboardState kbArray&lt;BR /&gt;
&amp;gt;     'get and return the key state&lt;BR /&gt;
&amp;gt;     GetKeyStatus = kbArray.kbByte(vkKey)&lt;BR /&gt;
&amp;gt; End Function&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Get capsOn() As Boolean&lt;BR /&gt;
&amp;gt;    capsOn = GetKeyStatus(VK_CAPITAL)&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Let capsOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt;    setKey VK_CAPITAL, bValue&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Get NumLockOn() As Boolean&lt;BR /&gt;
&amp;gt;    capsOn = GetKeyStatus(VK_NUMLOCK)&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Let NumLockOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt;    setKey VK_NUMLOCK, bValue&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Get ScrollOn() As Boolean&lt;BR /&gt;
&amp;gt;    capsOn = GetKeyStatus(VK_SCROLL)&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Let ScrollOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt;    setKey VK_SCROLL, bValue&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; 'End CKeyboard Class Module&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; --&lt;BR /&gt;
&amp;gt; Bobby C. Jones&lt;BR /&gt;
&amp;gt; http://www.acadx.com&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;/BOBBYJ&gt;</description>
      <pubDate>Fri, 12 Apr 2002 12:03:21 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351928#M75039</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-04-12T12:03:21Z</dc:date>
    </item>
    <item>
      <title>Re:</title>
      <link>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351929#M75040</link>
      <description>Win2k...Thanks Brian.&lt;BR /&gt;
--&lt;BR /&gt;
Bobby C. Jones&lt;BR /&gt;
http://www.acadx.com&lt;BR /&gt;
&lt;BR /&gt;
"Brian D" &lt;BCDIAL&gt; wrote in message&lt;BR /&gt;
news:ACAEE503B390685F354A38CADD430524@in.WebX.maYIadrTaRb...&lt;BR /&gt;
&amp;gt; Windows NT ?&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Maybe this will help...&lt;BR /&gt;
&amp;gt; http://support.microsoft.com/default.aspx?scid=kb;en-us;Q127190&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Brian D.&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; "Bobby C. Jones" &lt;BOBBYJ&gt; wrote in message&lt;BR /&gt;
&amp;gt; news:F1F34B0A58F60488ECE329A052A29749@in.WebX.maYIadrTaRb...&lt;BR /&gt;
&amp;gt; &amp;gt; Why doesn't this stinking code toggle the stupid capslock light on the&lt;BR /&gt;
&amp;gt; &amp;gt; keyboard...it toggles the capslock mode, but not the stupid light!!!&lt;BR /&gt;
&amp;gt; Thanks&lt;BR /&gt;
&amp;gt; &amp;gt; for your help.&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; &amp;gt; 'Sample call&lt;BR /&gt;
&amp;gt; &amp;gt; Public Sub testKB()&lt;BR /&gt;
&amp;gt; &amp;gt;     Dim oKeyboard As CKeyboard&lt;BR /&gt;
&amp;gt; &amp;gt;     Set oKeyboard = New CKeyboard&lt;BR /&gt;
&amp;gt; &amp;gt;     oKeyboard.capsOn = False&lt;BR /&gt;
&amp;gt; &amp;gt;     Set oKeyboard = Nothing&lt;BR /&gt;
&amp;gt; &amp;gt; End Sub&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; &amp;gt; 'CKeyboard Class Module&lt;BR /&gt;
&amp;gt; &amp;gt; Option Explicit&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Private Const VK_CAPITAL = &amp;amp;H14&lt;BR /&gt;
&amp;gt; &amp;gt; Private Const VK_NUMLOCK = &amp;amp;H90&lt;BR /&gt;
&amp;gt; &amp;gt; Private Const VK_SCROLL = &amp;amp;H91&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Private Type KeyboardBytes&lt;BR /&gt;
&amp;gt; &amp;gt;     kbByte(0 To 255) As Byte&lt;BR /&gt;
&amp;gt; &amp;gt; End Type&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As&lt;BR /&gt;
Long)&lt;BR /&gt;
&amp;gt; &amp;gt; As Long&lt;BR /&gt;
&amp;gt; &amp;gt; Private Declare Function GetKeyboardState Lib "user32" (kbArray As&lt;BR /&gt;
&amp;gt; &amp;gt; KeyboardBytes) As Long&lt;BR /&gt;
&amp;gt; &amp;gt; Private Declare Function SetKeyboardState Lib "user32" (kbArray As&lt;BR /&gt;
&amp;gt; &amp;gt; KeyboardBytes) As Long&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Private kbArray As KeyboardBytes&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Private Sub setKey(vkKey As Long, onVal As Boolean)&lt;BR /&gt;
&amp;gt; &amp;gt;     'Get the keyboard state&lt;BR /&gt;
&amp;gt; &amp;gt;     GetKeyboardState kbArray&lt;BR /&gt;
&amp;gt; &amp;gt;     'Change a key&lt;BR /&gt;
&amp;gt; &amp;gt;     kbArray.kbByte(vkKey) = Abs(onVal)&lt;BR /&gt;
&amp;gt; &amp;gt;     SetKeyboardState kbArray&lt;BR /&gt;
&amp;gt; &amp;gt; End Sub&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Private Function GetKeyStatus(vkKey As Long) As Boolean&lt;BR /&gt;
&amp;gt; &amp;gt;     'get the keyboard state&lt;BR /&gt;
&amp;gt; &amp;gt;     GetKeyboardState kbArray&lt;BR /&gt;
&amp;gt; &amp;gt;     'get and return the key state&lt;BR /&gt;
&amp;gt; &amp;gt;     GetKeyStatus = kbArray.kbByte(vkKey)&lt;BR /&gt;
&amp;gt; &amp;gt; End Function&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Public Property Get capsOn() As Boolean&lt;BR /&gt;
&amp;gt; &amp;gt;    capsOn = GetKeyStatus(VK_CAPITAL)&lt;BR /&gt;
&amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Public Property Let capsOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt; &amp;gt;    setKey VK_CAPITAL, bValue&lt;BR /&gt;
&amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Public Property Get NumLockOn() As Boolean&lt;BR /&gt;
&amp;gt; &amp;gt;    capsOn = GetKeyStatus(VK_NUMLOCK)&lt;BR /&gt;
&amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Public Property Let NumLockOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt; &amp;gt;    setKey VK_NUMLOCK, bValue&lt;BR /&gt;
&amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Public Property Get ScrollOn() As Boolean&lt;BR /&gt;
&amp;gt; &amp;gt;    capsOn = GetKeyStatus(VK_SCROLL)&lt;BR /&gt;
&amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Public Property Let ScrollOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt; &amp;gt;    setKey VK_SCROLL, bValue&lt;BR /&gt;
&amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; &amp;gt; 'End CKeyboard Class Module&lt;BR /&gt;
&amp;gt; &amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; --&lt;BR /&gt;
&amp;gt; &amp;gt; Bobby C. Jones&lt;BR /&gt;
&amp;gt; &amp;gt; http://www.acadx.com&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;/BOBBYJ&gt;&lt;/BCDIAL&gt;</description>
      <pubDate>Fri, 12 Apr 2002 12:18:09 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351929#M75040</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-04-12T12:18:09Z</dc:date>
    </item>
    <item>
      <title>Re:</title>
      <link>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351930#M75041</link>
      <description>I did not look very closely but it looks like the same code I use, and I'm&lt;BR /&gt;
using WinXP.  It works fine for me.&lt;BR /&gt;
&lt;BR /&gt;
--&lt;BR /&gt;
&lt;BR /&gt;
Dave Gardner&lt;BR /&gt;
"Bobby C. Jones" &lt;BOBBYJ&gt; wrote in message&lt;BR /&gt;
news:5CBA24DB028DABA6F5491363223B53DB@in.WebX.maYIadrTaRb...&lt;BR /&gt;
&amp;gt; Win2k...Thanks Brian.&lt;BR /&gt;
&amp;gt; --&lt;BR /&gt;
&amp;gt; Bobby C. Jones&lt;BR /&gt;
&amp;gt; http://www.acadx.com&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; "Brian D" &lt;BCDIAL&gt; wrote in message&lt;BR /&gt;
&amp;gt; news:ACAEE503B390685F354A38CADD430524@in.WebX.maYIadrTaRb...&lt;BR /&gt;
&amp;gt; &amp;gt; Windows NT ?&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Maybe this will help...&lt;BR /&gt;
&amp;gt; &amp;gt; http://support.microsoft.com/default.aspx?scid=kb;en-us;Q127190&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; Brian D.&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; "Bobby C. Jones" &lt;BOBBYJ&gt; wrote in message&lt;BR /&gt;
&amp;gt; &amp;gt; news:F1F34B0A58F60488ECE329A052A29749@in.WebX.maYIadrTaRb...&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Why doesn't this stinking code toggle the stupid capslock light on the&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; keyboard...it toggles the capslock mode, but not the stupid light!!!&lt;BR /&gt;
&amp;gt; &amp;gt; Thanks&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; for your help.&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; 'Sample call&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Public Sub testKB()&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     Dim oKeyboard As CKeyboard&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     Set oKeyboard = New CKeyboard&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     oKeyboard.capsOn = False&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     Set oKeyboard = Nothing&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; End Sub&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; 'CKeyboard Class Module&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Option Explicit&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Private Const VK_CAPITAL = &amp;amp;H14&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Private Const VK_NUMLOCK = &amp;amp;H90&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Private Const VK_SCROLL = &amp;amp;H91&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Private Type KeyboardBytes&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     kbByte(0 To 255) As Byte&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; End Type&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As&lt;BR /&gt;
&amp;gt; Long)&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; As Long&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Private Declare Function GetKeyboardState Lib "user32" (kbArray As&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; KeyboardBytes) As Long&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Private Declare Function SetKeyboardState Lib "user32" (kbArray As&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; KeyboardBytes) As Long&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Private kbArray As KeyboardBytes&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Private Sub setKey(vkKey As Long, onVal As Boolean)&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     'Get the keyboard state&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     GetKeyboardState kbArray&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     'Change a key&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     kbArray.kbByte(vkKey) = Abs(onVal)&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     SetKeyboardState kbArray&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; End Sub&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Private Function GetKeyStatus(vkKey As Long) As Boolean&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     'get the keyboard state&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     GetKeyboardState kbArray&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     'get and return the key state&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;     GetKeyStatus = kbArray.kbByte(vkKey)&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; End Function&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Public Property Get capsOn() As Boolean&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;    capsOn = GetKeyStatus(VK_CAPITAL)&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Public Property Let capsOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;    setKey VK_CAPITAL, bValue&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Public Property Get NumLockOn() As Boolean&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;    capsOn = GetKeyStatus(VK_NUMLOCK)&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Public Property Let NumLockOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;    setKey VK_NUMLOCK, bValue&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Public Property Get ScrollOn() As Boolean&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;    capsOn = GetKeyStatus(VK_SCROLL)&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Public Property Let ScrollOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;    setKey VK_SCROLL, bValue&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; End Property&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; 'End CKeyboard Class Module&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; '* * * * * * * * * * *&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; --&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; Bobby C. Jones&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt; http://www.acadx.com&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;/BOBBYJ&gt;&lt;/BCDIAL&gt;&lt;/BOBBYJ&gt;</description>
      <pubDate>Fri, 12 Apr 2002 12:37:06 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351930#M75041</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-04-12T12:37:06Z</dc:date>
    </item>
    <item>
      <title>Re: Capslock</title>
      <link>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351931#M75042</link>
      <description>Ok...This is what I've come up with so far.  I don't have an XP box to test&lt;BR /&gt;
this on, so until I can research a little further or until someone says&lt;BR /&gt;
otherwise I'll just take David's word that this works for XP.&lt;BR /&gt;
&lt;BR /&gt;
'Example of class usage&lt;BR /&gt;
Public Sub CKeyboard_Example()&lt;BR /&gt;
    Dim oKeyboard as CKeyboard&lt;BR /&gt;
&lt;BR /&gt;
    Set oKeyboard = New CKeyboard&lt;BR /&gt;
&lt;BR /&gt;
    'Turns on Capslock key&lt;BR /&gt;
    oKeyboard.capsOn = True&lt;BR /&gt;
&lt;BR /&gt;
    If oKeyboard.capsOn Then&lt;BR /&gt;
        MsgBox "Capslock is on"&lt;BR /&gt;
      Else&lt;BR /&gt;
        MsgBox "Capslock is off"&lt;BR /&gt;
    End If&lt;BR /&gt;
&lt;BR /&gt;
    Set oKeyboard = Nothing&lt;BR /&gt;
End Sub&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
VERSION 1.0 CLASS&lt;BR /&gt;
BEGIN&lt;BR /&gt;
  MultiUse = -1  'True&lt;BR /&gt;
END&lt;BR /&gt;
Attribute VB_Name = "CKeyboard"&lt;BR /&gt;
Attribute VB_GlobalNameSpace = False&lt;BR /&gt;
Attribute VB_Creatable = False&lt;BR /&gt;
Attribute VB_PredeclaredId = False&lt;BR /&gt;
Attribute VB_Exposed = False&lt;BR /&gt;
Option Explicit&lt;BR /&gt;
&lt;BR /&gt;
Private Const VK_CAPITAL = &amp;amp;H14&lt;BR /&gt;
Private Const VK_NUMLOCK = &amp;amp;H90&lt;BR /&gt;
Private Const VK_SCROLL = &amp;amp;H91&lt;BR /&gt;
Private Const KEYEVENTF_EXTENDEDKEY = &amp;amp;H1&lt;BR /&gt;
Private Const KEYEVENTF_KEYUP = &amp;amp;H2&lt;BR /&gt;
Private Const VER_PLATFORM_WIN32_NT = 2&lt;BR /&gt;
Private Const VER_PLATFORM_WIN32_WINDOWS = 1&lt;BR /&gt;
&lt;BR /&gt;
Private Type KeyboardBytes&lt;BR /&gt;
    kbByte(0 To 255) As Byte&lt;BR /&gt;
End Type&lt;BR /&gt;
&lt;BR /&gt;
Private Type OSVERSIONINFO&lt;BR /&gt;
    dwOSVerInfoSize As Long&lt;BR /&gt;
    dwMajorVer As Long&lt;BR /&gt;
    dwMinorVer As Long&lt;BR /&gt;
    dwBuildNumber As Long&lt;BR /&gt;
    dwPlatformID As Long&lt;BR /&gt;
    szCSDVer As String * 128&lt;BR /&gt;
End Type&lt;BR /&gt;
&lt;BR /&gt;
Private Declare Function GetVersionEX Lib "kernel32" _&lt;BR /&gt;
    Alias "GetVersionExA" _&lt;BR /&gt;
    (lpVersionInformation As OSVERSIONINFO) As Long&lt;BR /&gt;
&lt;BR /&gt;
Private Declare Sub keybd_event Lib "user32" _&lt;BR /&gt;
    (ByVal bVk As Byte, _&lt;BR /&gt;
     ByVal bScan As Byte, _&lt;BR /&gt;
     ByVal dwFlags As Long, _&lt;BR /&gt;
     ByVal dwExtraInfo As Long)&lt;BR /&gt;
&lt;BR /&gt;
Private Declare Function GetKeyboardState Lib "user32" (keys As&lt;BR /&gt;
KeyboardBytes) As Long&lt;BR /&gt;
Private Declare Function SetKeyboardState Lib "user32" (keys As&lt;BR /&gt;
KeyboardBytes) As Long&lt;BR /&gt;
&lt;BR /&gt;
Private keys As KeyboardBytes&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
'* * * * * * * * * * * * *&lt;BR /&gt;
'Public Members&lt;BR /&gt;
'* * * * * * * * * * * * *&lt;BR /&gt;
&lt;BR /&gt;
Public Property Get capsOn() As Boolean&lt;BR /&gt;
   capsOn = GetKeyStatus(VK_CAPITAL)&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
Public Property Let capsOn(ByVal bValue As Boolean)&lt;BR /&gt;
   setKey VK_CAPITAL, bValue&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
Public Property Get NumLockOn() As Boolean&lt;BR /&gt;
   NumLockOn = GetKeyStatus(VK_NUMLOCK)&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
Public Property Let NumLockOn(ByVal bValue As Boolean)&lt;BR /&gt;
   setKey VK_NUMLOCK, bValue&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
Public Property Get ScrollOn() As Boolean&lt;BR /&gt;
   ScrollOn = GetKeyStatus(VK_SCROLL)&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
Public Property Let ScrollOn(ByVal bValue As Boolean)&lt;BR /&gt;
   setKey VK_SCROLL, bValue&lt;BR /&gt;
End Property&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
'* * * * * * * * * * * * *&lt;BR /&gt;
'Private functions&lt;BR /&gt;
'* * * * * * * * * * * * *&lt;BR /&gt;
&lt;BR /&gt;
Private Sub setKey(vkKey As Long, onVal As Boolean)&lt;BR /&gt;
    Dim OS As OSVERSIONINFO&lt;BR /&gt;
    Dim keyState As Boolean&lt;BR /&gt;
&lt;BR /&gt;
    'get OS info&lt;BR /&gt;
    OS.dwOSVerInfoSize = Len(OS)&lt;BR /&gt;
    GetVersionEX OS&lt;BR /&gt;
&lt;BR /&gt;
    'Get the keyboard state&lt;BR /&gt;
    GetKeyboardState keys&lt;BR /&gt;
&lt;BR /&gt;
    'Get the key state&lt;BR /&gt;
    keyState = keys.kbByte(vkKey)&lt;BR /&gt;
&lt;BR /&gt;
    'Change a key&lt;BR /&gt;
    If keyState &amp;lt;&amp;gt; onVal Then&lt;BR /&gt;
        If OS.dwPlatformID = VER_PLATFORM_WIN32_NT Then&lt;BR /&gt;
            'simulate key press&lt;BR /&gt;
            keybd_event vkKey, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY Or 0, 0&lt;BR /&gt;
            'simulate key release&lt;BR /&gt;
            keybd_event vkKey, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY Or&lt;BR /&gt;
KEYEVENTF_KEYUP, 0&lt;BR /&gt;
          Else&lt;BR /&gt;
            keys.kbByte(vkKey) = Abs(onVal)&lt;BR /&gt;
            SetKeyboardState keys&lt;BR /&gt;
        End If&lt;BR /&gt;
    End If&lt;BR /&gt;
End Sub&lt;BR /&gt;
&lt;BR /&gt;
Private Function GetKeyStatus(vkKey As Long) As Boolean&lt;BR /&gt;
    'get the keyboard state&lt;BR /&gt;
    GetKeyboardState keys&lt;BR /&gt;
    'get and return the key state&lt;BR /&gt;
    GetKeyStatus = keys.kbByte(vkKey)&lt;BR /&gt;
End Function&lt;BR /&gt;
&lt;BR /&gt;
--&lt;BR /&gt;
Bobby C. Jones&lt;BR /&gt;
http://www.acadx.com</description>
      <pubDate>Sat, 13 Apr 2002 09:33:47 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351931#M75042</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-04-13T09:33:47Z</dc:date>
    </item>
    <item>
      <title>Re:</title>
      <link>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351932#M75043</link>
      <description>Well here is the code I use.  Somone else wrote it.  And I can't remember&lt;BR /&gt;
who.  One of the problems with this code is that the Office Shortcut Bar&lt;BR /&gt;
does not work correct.  You have to make AutoCAD not active then you can&lt;BR /&gt;
click a button.  And after more of look (still not line for line compare)&lt;BR /&gt;
the 2 code look more different.  If you look for this post there is more&lt;BR /&gt;
info on the code I'm giving you: "AutoCAD 2002 activate/deactivate" posted&lt;BR /&gt;
on Feb. 25, 2002.&lt;BR /&gt;
&lt;BR /&gt;
Public WithEvents ACADApp As AcadApplication&lt;BR /&gt;
&lt;BR /&gt;
Private Declare Sub keybd_event Lib "user32" _&lt;BR /&gt;
         (ByVal bVk As Byte, _&lt;BR /&gt;
          ByVal bScan As Byte, _&lt;BR /&gt;
          ByVal dwFlags As Long, ByVal dwExtraInfo As Long)&lt;BR /&gt;
&lt;BR /&gt;
Private Declare Function GetKeyboardState Lib "user32" _&lt;BR /&gt;
         (pbKeyState As Byte) As Long&lt;BR /&gt;
&lt;BR /&gt;
Private Declare Function SetKeyboardState Lib "user32" _&lt;BR /&gt;
         (lppbKeyState As Byte) As Long&lt;BR /&gt;
&lt;BR /&gt;
Const VK_CAPITAL = &amp;amp;H14&lt;BR /&gt;
      Const KEYEVENTF_EXTENDEDKEY = &amp;amp;H1&lt;BR /&gt;
      Const KEYEVENTF_KEYUP = &amp;amp;H2&lt;BR /&gt;
&lt;BR /&gt;
Dim keys(0 To 255) As Byte&lt;BR /&gt;
&lt;BR /&gt;
Sub ACADStartup()&lt;BR /&gt;
Set ACADApp = GetObject(, "AutoCAD.Application")&lt;BR /&gt;
Call ACADApp_AppActivate&lt;BR /&gt;
End Sub&lt;BR /&gt;
&lt;BR /&gt;
Private Sub ACADApp_AppActivate()&lt;BR /&gt;
GetKeyboardState keys(0)&lt;BR /&gt;
keybd_event VK_CAPITAL, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY Or 0, 0&lt;BR /&gt;
keybd_event VK_CAPITAL, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY _&lt;BR /&gt;
    Or KEYEVENTF_KEYUP, 0&lt;BR /&gt;
End Sub&lt;BR /&gt;
&lt;BR /&gt;
Private Sub ACADApp_AppDeactivate()&lt;BR /&gt;
GetKeyboardState keys(0)&lt;BR /&gt;
keybd_event VK_CAPITAL, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY Or 0, 0&lt;BR /&gt;
keybd_event VK_CAPITAL, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY _&lt;BR /&gt;
    Or KEYEVENTF_KEYUP, 0&lt;BR /&gt;
End Sub&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
--&lt;BR /&gt;
&lt;BR /&gt;
Dave Gardner&lt;BR /&gt;
"Bobby C. Jones" &lt;BOBBYJ&gt; wrote in message&lt;BR /&gt;
news:A19CCBAA1FDB37984BC0DE56DF909E20@in.WebX.maYIadrTaRb...&lt;BR /&gt;
&amp;gt; Ok...This is what I've come up with so far.  I don't have an XP box to&lt;BR /&gt;
test&lt;BR /&gt;
&amp;gt; this on, so until I can research a little further or until someone says&lt;BR /&gt;
&amp;gt; otherwise I'll just take David's word that this works for XP.&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; 'Example of class usage&lt;BR /&gt;
&amp;gt; Public Sub CKeyboard_Example()&lt;BR /&gt;
&amp;gt;     Dim oKeyboard as CKeyboard&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     Set oKeyboard = New CKeyboard&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     'Turns on Capslock key&lt;BR /&gt;
&amp;gt;     oKeyboard.capsOn = True&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     If oKeyboard.capsOn Then&lt;BR /&gt;
&amp;gt;         MsgBox "Capslock is on"&lt;BR /&gt;
&amp;gt;       Else&lt;BR /&gt;
&amp;gt;         MsgBox "Capslock is off"&lt;BR /&gt;
&amp;gt;     End If&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     Set oKeyboard = Nothing&lt;BR /&gt;
&amp;gt; End Sub&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; VERSION 1.0 CLASS&lt;BR /&gt;
&amp;gt; BEGIN&lt;BR /&gt;
&amp;gt;   MultiUse = -1  'True&lt;BR /&gt;
&amp;gt; END&lt;BR /&gt;
&amp;gt; Attribute VB_Name = "CKeyboard"&lt;BR /&gt;
&amp;gt; Attribute VB_GlobalNameSpace = False&lt;BR /&gt;
&amp;gt; Attribute VB_Creatable = False&lt;BR /&gt;
&amp;gt; Attribute VB_PredeclaredId = False&lt;BR /&gt;
&amp;gt; Attribute VB_Exposed = False&lt;BR /&gt;
&amp;gt; Option Explicit&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Const VK_CAPITAL = &amp;amp;H14&lt;BR /&gt;
&amp;gt; Private Const VK_NUMLOCK = &amp;amp;H90&lt;BR /&gt;
&amp;gt; Private Const VK_SCROLL = &amp;amp;H91&lt;BR /&gt;
&amp;gt; Private Const KEYEVENTF_EXTENDEDKEY = &amp;amp;H1&lt;BR /&gt;
&amp;gt; Private Const KEYEVENTF_KEYUP = &amp;amp;H2&lt;BR /&gt;
&amp;gt; Private Const VER_PLATFORM_WIN32_NT = 2&lt;BR /&gt;
&amp;gt; Private Const VER_PLATFORM_WIN32_WINDOWS = 1&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Type KeyboardBytes&lt;BR /&gt;
&amp;gt;     kbByte(0 To 255) As Byte&lt;BR /&gt;
&amp;gt; End Type&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Type OSVERSIONINFO&lt;BR /&gt;
&amp;gt;     dwOSVerInfoSize As Long&lt;BR /&gt;
&amp;gt;     dwMajorVer As Long&lt;BR /&gt;
&amp;gt;     dwMinorVer As Long&lt;BR /&gt;
&amp;gt;     dwBuildNumber As Long&lt;BR /&gt;
&amp;gt;     dwPlatformID As Long&lt;BR /&gt;
&amp;gt;     szCSDVer As String * 128&lt;BR /&gt;
&amp;gt; End Type&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Declare Function GetVersionEX Lib "kernel32" _&lt;BR /&gt;
&amp;gt;     Alias "GetVersionExA" _&lt;BR /&gt;
&amp;gt;     (lpVersionInformation As OSVERSIONINFO) As Long&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Declare Sub keybd_event Lib "user32" _&lt;BR /&gt;
&amp;gt;     (ByVal bVk As Byte, _&lt;BR /&gt;
&amp;gt;      ByVal bScan As Byte, _&lt;BR /&gt;
&amp;gt;      ByVal dwFlags As Long, _&lt;BR /&gt;
&amp;gt;      ByVal dwExtraInfo As Long)&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Declare Function GetKeyboardState Lib "user32" (keys As&lt;BR /&gt;
&amp;gt; KeyboardBytes) As Long&lt;BR /&gt;
&amp;gt; Private Declare Function SetKeyboardState Lib "user32" (keys As&lt;BR /&gt;
&amp;gt; KeyboardBytes) As Long&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private keys As KeyboardBytes&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * * * *&lt;BR /&gt;
&amp;gt; 'Public Members&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * * * *&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Get capsOn() As Boolean&lt;BR /&gt;
&amp;gt;    capsOn = GetKeyStatus(VK_CAPITAL)&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Let capsOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt;    setKey VK_CAPITAL, bValue&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Get NumLockOn() As Boolean&lt;BR /&gt;
&amp;gt;    NumLockOn = GetKeyStatus(VK_NUMLOCK)&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Let NumLockOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt;    setKey VK_NUMLOCK, bValue&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Get ScrollOn() As Boolean&lt;BR /&gt;
&amp;gt;    ScrollOn = GetKeyStatus(VK_SCROLL)&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Public Property Let ScrollOn(ByVal bValue As Boolean)&lt;BR /&gt;
&amp;gt;    setKey VK_SCROLL, bValue&lt;BR /&gt;
&amp;gt; End Property&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * * * *&lt;BR /&gt;
&amp;gt; 'Private functions&lt;BR /&gt;
&amp;gt; '* * * * * * * * * * * * *&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Sub setKey(vkKey As Long, onVal As Boolean)&lt;BR /&gt;
&amp;gt;     Dim OS As OSVERSIONINFO&lt;BR /&gt;
&amp;gt;     Dim keyState As Boolean&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     'get OS info&lt;BR /&gt;
&amp;gt;     OS.dwOSVerInfoSize = Len(OS)&lt;BR /&gt;
&amp;gt;     GetVersionEX OS&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     'Get the keyboard state&lt;BR /&gt;
&amp;gt;     GetKeyboardState keys&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     'Get the key state&lt;BR /&gt;
&amp;gt;     keyState = keys.kbByte(vkKey)&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;     'Change a key&lt;BR /&gt;
&amp;gt;     If keyState &amp;lt;&amp;gt; onVal Then&lt;BR /&gt;
&amp;gt;         If OS.dwPlatformID = VER_PLATFORM_WIN32_NT Then&lt;BR /&gt;
&amp;gt;             'simulate key press&lt;BR /&gt;
&amp;gt;             keybd_event vkKey, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY Or 0, 0&lt;BR /&gt;
&amp;gt;             'simulate key release&lt;BR /&gt;
&amp;gt;             keybd_event vkKey, &amp;amp;H45, KEYEVENTF_EXTENDEDKEY Or&lt;BR /&gt;
&amp;gt; KEYEVENTF_KEYUP, 0&lt;BR /&gt;
&amp;gt;           Else&lt;BR /&gt;
&amp;gt;             keys.kbByte(vkKey) = Abs(onVal)&lt;BR /&gt;
&amp;gt;             SetKeyboardState keys&lt;BR /&gt;
&amp;gt;         End If&lt;BR /&gt;
&amp;gt;     End If&lt;BR /&gt;
&amp;gt; End Sub&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Private Function GetKeyStatus(vkKey As Long) As Boolean&lt;BR /&gt;
&amp;gt;     'get the keyboard state&lt;BR /&gt;
&amp;gt;     GetKeyboardState keys&lt;BR /&gt;
&amp;gt;     'get and return the key state&lt;BR /&gt;
&amp;gt;     GetKeyStatus = keys.kbByte(vkKey)&lt;BR /&gt;
&amp;gt; End Function&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; --&lt;BR /&gt;
&amp;gt; Bobby C. Jones&lt;BR /&gt;
&amp;gt; http://www.acadx.com&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;/BOBBYJ&gt;</description>
      <pubDate>Mon, 15 Apr 2002 04:41:17 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/vba-forum/capslock/m-p/351932#M75043</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-04-15T04:41:17Z</dc:date>
    </item>
  </channel>
</rss>

