我想找到一種方法來檢測按鍵,然後根據它是什麼關鍵運行方法。檢測python中的按鍵,而在後臺
我已經可以用Tkinter做到這一點。但是我不能做的是在窗口在後臺時檢測按鍵。當我玩遊戲時,我將在後臺運行該程序。我需要它能夠在遊戲中檢測輸入。
有什麼辦法可以用Tkinter或其他方法做到這一點?最好我不想下載任何外部的,因爲我想分發給其他人。
我想找到一種方法來檢測按鍵,然後根據它是什麼關鍵運行方法。檢測python中的按鍵,而在後臺
我已經可以用Tkinter做到這一點。但是我不能做的是在窗口在後臺時檢測按鍵。當我玩遊戲時,我將在後臺運行該程序。我需要它能夠在遊戲中檢測輸入。
有什麼辦法可以用Tkinter或其他方法做到這一點?最好我不想下載任何外部的,因爲我想分發給其他人。
pyHook似乎將這個(由furas提到的)很好地工作
from pyHook import HookManager
from win32gui import PumpMessages, PostQuitMessage
class Keystroke_Watcher(object):
def __init__(self):
self.hm = HookManager()
self.hm.KeyDown = self.on_keyboard_event
self.hm.HookKeyboard()
def on_keyboard_event(self, event):
try:
if event.KeyID == keycode_youre_looking_for:
self.your_method()
finally:
return True
def your_method(self):
pass
def shutdown(self):
PostQuitMessage(0)
self.hm.UnhookKeyboard()
watcher = Keystroke_Watcher()
PumpMessages()
太從你的按鍵事件的所有屬性。您可以執行以下操作:
import pythoncom, pyHook
def OnKeyboardEvent(event):
print('MessageName:',event.MessageName)
print('Message:',event.Message)
print('Time:',event.Time)
print('Window:',event.Window)
print('WindowName:',event.WindowName)
print('Ascii:', event.Ascii, chr(event.Ascii))
print('Key:', event.Key)
print('KeyID:', event.KeyID)
print('ScanCode:', event.ScanCode)
print('Extended:', event.Extended)
print('Injected:', event.Injected)
print('Alt', event.Alt)
print('Transition', event.Transition)
print('---')
# return True to pass the event to other handlers
return True
# create a hook manager
hm = pyHook.HookManager()
# watch for all mouse events
hm.KeyDown = OnKeyboardEvent
# set the hook
hm.HookKeyboard()
# wait forever
pythoncom.PumpMessages()
現在知道按鍵的所有細節並在其上進行操作。
按下「S」是這樣的
MessageName: key down
Message: 256
Time: 449145375
Window: 2558060
WindowName: "file name"
Ascii: 115 s
Key: S
KeyID: 83
ScanCode: 31
Extended: 0
Injected: 0
Alt 0
Transition 0
你是說你要檢測像一個鍵盤記錄,或者只是一個鍵全鍵盤活動在前臺再次獲得該計劃?在後一種情況下,您可能對桌面環境的熱鍵配置有好運。 – tdelaney
'Autokey'是檢測按鍵並運行腳本的程序。它是用python編寫的。檢查它的源代碼。特別是IOMediator類 - https://code.google.com/p/autokey/source/browse/trunk/src/lib/iomediator.py – furas
操作系統不會將關鍵事件發送給後臺程序,因此您需要類似於'pykeylogger'或'pyhook' – furas