2014-02-13 22 views
1

我想檢測CTRL | SHIFT | ALT在執行python腳本期間是否被按下以改變它的行爲。因此,如果我運行一個腳本與SHIFT按住我想要一個GUI彈出打開,而不是一個命令行...等等...用python ctypes檢測shift-key按

因爲msvcrt.kbhit無法檢測到SHIFT按鍵我做了一些挖掘並發現這個似乎非常有前途的solution。我將SHIFT添加到其熱鍵列表中作爲測試。不幸的是,如果你嘗試下面的代碼在DOS shell中,你會發現它能正確檢測到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) 

回答