Forum: Poser Python Scripting


Subject: Useful Code Snippets

structure opened this issue on Jun 27, 2019 ยท 94 posts


structure posted Fri, 03 June 2022 at 12:19 PM Forum Coordinator

Toggle lock keys  * WINDOWS 

importable script: ( I saved this in lib/site-packages under folder _toggle_keys)

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)))

Locked Out