Another one...
Code: Select all
#Print Keyboard led Windows 32/64
#Print Coded written under FreeBASIC 1.05.0
#Ifdef __FB_64BIT__
#Print 64bit compiler used
#Else
#Print 32bit compiler used
#EndIf
#Lang "fb"
#Include Once "windows.bi"
#Define Unicode
#Define Tabb Chr(9)
#Define CrLf Chr(13, 10)
#Define KbReset 0
#Define KbSet 1
#Define KbRead 2
#Define KbToggle 3
#Define KbSave 4
#Define KbRestore 5
Sub KeyStateSub(VKkey As Long, SetResetToggle As Long, keyStateArray() As Byte)
keybd_event(VKkey, 0, KEYEVENTF_EXTENDEDKEY, 0)
keybd_event(VKkey, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
If VKkey = VK_CAPITAL Then
If SetResetToggle = KbReset Then
'Some keyboard driver release <CapLock> by the use of the <Shift> key.
keybd_event(VK_SHIFT, 0, 0, 0)
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0)
End If
End If
KeyStateArray(VKkey) = SetResetToggle
SetKeyboardState(ByVal VarPtr(keyStateArray(0)))
End Sub
Function KeyState(VKkey As Long, Action As Long) As Long
Dim SetResetToggle As Long
Dim KeyStateArray(256) As Byte
Static KeyStateCaps As Byte
Static KeyStateNum As Byte
Static KeyStateScroll As Byte
Static KeyStateInsert As Byte
GetKeyboardState(ByVal VarPtr(keyStateArray(0)))
Select Case Action
Case KbSave
KeyStateCaps = KeyStateArray(VK_CAPITAL)
KeyStateNum = KeyStateArray(VK_NUMLOCK)
KeyStateScroll = KeyStateArray(VK_SCROLL)
KeyStateInsert = KeyStateArray(VK_INSERT)
Case KbRestore
If KeyStateArray(VK_CAPITAL) <> KeyStateCaps Then
SetResetToggle = KeyStateCaps : VkKey = VK_CAPITAL : KeyStateSub(VKkey, SetResetToggle, keyStateArray())
End If
If KeyStateArray(VK_NUMLOCK) <> KeyStateNum Then
SetResetToggle = KeyStateNum : VkKey = VK_NUMLOCK : KeyStateSub(VKkey, SetResetToggle, keyStateArray())
End If
If KeyStateArray(VK_SCROLL) <> KeyStateScroll Then
SetResetToggle = KeyStateScroll : VkKey = VK_SCROLL : KeyStateSub(VKkey, SetResetToggle, keyStateArray())
End If
If KeyStateArray(VK_INSERT) <> KeyStateInsert Then
SetResetToggle = KeyStateInsert : VkKey = VK_INSERT : KeyStateSub(VKkey, SetResetToggle, keyStateArray())
End If
Case KbToggle
If KeyStateArray(VKkey) = 0 Then
SetResetToggle = KbSet
Else
SetResetToggle = KbReSet
End If
KeyStateSub(VKkey,SetResetToggle, keyStateArray())
Case KbSet
If KeyStateArray(VKkey) = 0 Then
SetResetToggle = Action
KeyStateSub(VKkey,SetResetToggle, keyStateArray())
End If
Case KbReset
If KeyStateArray(VKkey) = 1 Then
SetResetToggle = Action
KeyStateSub(VKkey,SetResetToggle, keyStateArray())
End If
Case KbRead
Function = KeyStateArray(VKkey)
End Select
End Function
Dim Looper As Long
Dim InsertStare As Long
Dim Buffer As String
MessageBox(0,_ 'Get keyboard status and show it
"Insert: " & Tabb & Str(InsertStare) & Buffer & CrLf & _
"Numlock:" & Tabb & Str(KeyState(VK_NUMLOCK, KbRead)) & CrLf & _
"Capslock:" & Tabb & Str(KeyState(VK_CAPITAL, KbRead)) & CrLf & _
"Scrollock:" & Tabb & Str(KeyState(VK_SCROLL, KbRead)) & CrLf & CrLf & _
"See current state, click ""OK"" to start", _
"KeyState", MB_ICONINFORMATION Or MB_OK)
MessageBox(0, "Look at keyboard light", "KeyState", _
MB_ICONINFORMATION Or MB_OK)
KeyState(0, KbSave) 'Save keyboard status
KeyState(VK_NUMLOCK, KbReset) 'Set NumLock off
KeyState(VK_CAPITAL, KbReset) 'Set CapLock off
KeyState(VK_SCROLL , KbReset) 'Set ScrollLock off
For Looper = 1 To 5
KeyState(VK_SCROLL , KbReset) 'Set ScrollLock off
KeyState(VK_NUMLOCK, KbSet) 'Set NumLock on
Sleep 300
KeyState(VK_NUMLOCK, KbReset) 'Set NumLock off
KeyState(VK_CAPITAL, KbSet) 'Set CapLock on
Sleep 300
KeyState(VK_CAPITAL, KbReset) 'Set CapLock off
KeyState(VK_SCROLL , KbSet) 'Set ScrollLock on
Sleep 300
Next
KeyState(VK_INSERT, KbToggle) 'Togggle the insert state
InsertStare = KeyState(VK_INSERT, KbRead) 'Check if we are in <Insert> or <OverWrite> mode
If InsertStare = 0 Then
Buffer = " (Overwrite mode)"
Else
Buffer = " (Insert mode)"
End If
MessageBox(0,_ 'Get keyboard status and show it
"Insert: " & Tabb & Str(InsertStare) & Buffer & CrLf & _
"Numlock:" & Tabb & Str(KeyState(VK_NUMLOCK, KbRead)) & CrLf & _
"Capslock:" & Tabb & Str(KeyState(VK_CAPITAL, KbRead)) & CrLf & _
"Scrollock:" & Tabb & Str(KeyState(VK_SCROLL, KbRead)) & CrLf & CrLf & _
"Click ""OK"" to go back to initial keyboard state", _
"KeyState", MB_ICONINFORMATION Or MB_OK)
KeyState(0, KbRestore) 'Restore keyboard status as it was before