我想要一个python tkinter应用程序来注册一个全局热键(即使应用程序没有焦点也会触发)。我发现了一些碎片,但我找不到把它们放在一起的方法......
基本上,我可以注册热键(通过调用windows API RegisterHotKey),但它会向Tkinter主循环管理下的根窗口发送“WM_HOTKEY”消息,我无法找到绑定它的方法...
tk.protocol()函数似乎就在那里,但是这条消息似乎无法理解(我找不到已识别消息的完整列表)...
这是一个非工作代码示例,我想在按下“WIN-F3”时打印一条消息...
import Tkinter
import ctypes
import win32con
class App(Tkinter.Tk):
def __init__(self):
Tkinter.Tk.__init__(self)
user32 = ctypes.windll.user32
if user32.RegisterHotKey (None, 1, win32con.MOD_WIN , win32con.VK_F3):
print("hotkey registered")
else:
print("Cannot register hotkey")
self.protocol("WM_HOTKEY", self.hotkey_received)
def hotkey_received(self):
print("hotkey")
if __name__ == "__main__":
app = App()
app.mainloop()
try:
app.destroy()
except:
pass
由于
编辑--------------------------------
好的,我找到了一种方法,将整个窗口循环推送到一个独立的线程中,独立于tkinter主循环。
虽然因为我实际上有2个循环运行基本上与操作系统的相同类型的交互,但它需要一个消息队列来与应用程序进行交互,但它确实不是一个干净的解决方案。 。 如果有人有更好的选择,我会很高兴看到它......