from ctypes import windll
from win32con import VK_CAPITAL, VK_NUMLOCK, VK_SCROLL
from win32api import GetKeyState
TEST_STATUS = False
# toggle status is binary 0/1 - on/off
class KEY_SYSTEM:
def toggle_key(self, key, turn_on=0):
'''
toggle_key(int) -> int
Turns key on or off and returns whether
it was originally on or off. '''
KEYEVENTF_KEYUP = 2
KEYEVENTF_EXTENDEDKEY = 1
KEYEVENTF_KEYUP = 2
is_on = GetKeyState(key) & 1
if is_on != turn_on:
windll.user32.keybd_event(key,
69,
KEYEVENTF_EXTENDEDKEY | 0,
0)
windll.user32.keybd_event(key, 69,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0)
return is_on
def get_key_status(self, key):
# key must be one of the following integer values - 20, 144, 145
return None if key not in [20, 144, 145] else GetKeyState(key)
script to import and run:
from _toggle_keys import KEY_SYSTEM as toggle
keys = {20: "CAPS",
144: "NUM",
145: "SCROLL", }
for k in keys:
OFFON = toggle.get_key_status(None, k)
toggle.toggle_key(None, k, not(OFFON))
print(f"{keys[k]}_LOCK is off", end="\n\n") if OFFON else print(
f"{keys[k]}_LOCK is on", end="\n\n")
if __name__ == "__main__":
for k in (20, 144, 145):
# turn off/on key lock 0 = off, 1 = on
KEY_SYSTEM().toggle_key(k, not(KEY_SYSTEM().get_key_status(k)))