Windows'ta python'da özel bir arcade başlatıcısı üzerinde çalışıyorum. Sistem ve oyun seçmek, sonra emülatörü başlatmak istiyorum - ve emülatörü öldürmek için belirli bir tuş kombinasyonunu kullanmak istiyorum. Tüm anahtar kancalarım rastgele uygulamalarla test yaparken çalışır, ancak gerçekten emülatörleri (ör. Nestopia) başlattığımda, anahtar kancalarım ateş etmez. Şu anda hotkeys değil olayları alır RegisterHotKey kullanıyorum. Nestopia'dan önce olayı fiilen almak için yeterince düşük bir şeyin nasıl kurulacağı konusunda bir fikri olan var mı? Benim kodum:Windows'da, en düşük seviyeli global klavye kancasını nasıl kurabilirim?
import ctypes
import win32con
from ctypes import wintypes
from ctypes import byref
user32 = ctypes.windll.user32
class SimpleKeyboardHook:
def getNextId(self):
SimpleKeyboardHook._id += 1
return SimpleKeyboardHook._id
# modifiers is a bitmask with win32con.[MOD_SHIFT, MOD_ALT, MOD_CONTROL, MOD_WIN]
def waitFor(self, key, modifiers):
# coerce to 0 if necessary
modifiers = modifiers or 0
id = self.getNextId()
hk = user32.RegisterHotKey(None, id, modifiers, key)
print "register hotkey: ",hk
if not hk:
print "Unable to register hotkey for key ", key
return False
print "registered id", id
try:
msg = wintypes.MSG()
while user32.GetMessageA(byref(msg), None, 0, 0) != 0:
print "got message",msg.message,"which is not",win32con.WM_HOTKEY
if msg.message == win32con.WM_HOTKEY:
print "got hotkey"
if msg.wParam == id:
print "found proper hotkey"
return True
user32.TranslateMessage(byref(msg))
user32.DispatchMessageA(byref(msg))
finally:
user32.UnregisterHotKey(None, id)
return False
SimpleKeyboardHook._id = 0
python değil, ancak bu size yardımcı olmak için size yardımcı olabilir: http://stackoverflow.com/questions/1465135/detecting-keyboard-hooks – n611x007