2014-02-13 2 views
1

Я хочу определить, удерживаются ли 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) 

ответ

2

Там в пакете с именем PyHook, который заботится о большинстве низкоуровневых деталей, связанных с входными событиями на окнах. Возможно, стоит посмотреть.

Ссылка на клавиатурные перехватчики документации:

Ссылки на монтажников:

Смежные вопросы