Я хочу определить, удерживаются ли CTRL | SHIFT | ALT во время выполнения скрипта python, чтобы изменить его поведение. Поэтому для ex, если я запускаю скрипт с нажатой SHIFT, я хочу, чтобы графический интерфейс открывался вместо командной строки ... и т. Д.Обнаружение сменных клавиш с помощью python ctypes
Поскольку msvcrt.kbhit не смог обнаружить нажатия клавиш SHIFT, я сделал некоторые копания и нашел это solution, который казался очень перспективным. Я добавил SHIFT в свой список горячих клавиш в качестве теста. К сожалению, если вы попробуете код ниже в оболочке dos, вы увидите, что он правильно обнаруживает нажатия клавиш ESC и NUMLOCK, но он не будет захватывать нажатия SHIFT, и я не могу понять, почему это так.
Любое понимание было бы высоко оценено.
import ctypes, ctypes.wintypes
import win32con
# Register hotkeys
ctypes.windll.user32.RegisterHotKey(None, 1, 0, win32con.VK_ESCAPE)
ctypes.windll.user32.RegisterHotKey(None, 1, 0, win32con.VK_NUMLOCK)
ctypes.windll.user32.RegisterHotKey(None, 1, 0, win32con.VK_LSHIFT)
ctypes.windll.user32.RegisterHotKey(None, 1, 0, win32con.VK_RSHIFT)
# Loop until one of the hotkeys are pressed
try:
msg = ctypes.wintypes.MSG()
while ctypes.windll.user32.GetMessageA(ctypes.byref(msg), None, 0, 0) != 0:
if msg.message == win32con.WM_HOTKEY:
print("KEY PRESSED!")
ctypes.windll.user32.TranslateMessage(ctypes.byref(msg))
ctypes.windll.user32.DispatchMessageA(ctypes.byref(msg))
# Cleanup
finally:
ctypes.windll.user32.UnregisterHotKey(None, 1)