我想用 wxPython 做一些事情,但我不知道怎么做。 (我使用的是 Windows 7,我可以接受仅限 Windows 的解决方案。)
我想在全局范围内捕捉关键事件。这意味着 key-up、key-down 和 char 事件。 (我正在尝试用 Python 构建类似 AHK 的东西。)
现在,我知道 wxPython 允许全局热键,但这并不令人满意,因为我想获得所有的事件,包括按下键、按下键和字符。我怎样才能做到这一点?
我尝试使用 pyHook,除了未实现 char 事件外,它几乎可以正常工作。 Char 事件似乎很棘手,我想知道如何在全局范围内捕获它们。 (即在所有应用程序中。)我也同意使用除 wxPython 之外的其他工具的解决方案。 (除了没有单独的 GUI 框架,我很高兴将 wxPython 用于 GUI,只是用于捕获 char 事件的工具。)
最佳答案
抱歉,您不能直接从 Python 可执行文件中捕获 WM_CHAR 事件。您将需要编写一个 native Windows DLL 来 Hook WH_GETMESSAGE,然后单独通知您的 Python 进程按下了一个键。
如你所见here捕获 WM_CHAR 的方法是使用 WH_GETMESSAGE Hook 捕获 GetMessage() 读取的事件。遗憾的是,该消息的任何全局 Hook 都必须能够在任何进程的上下文中运行,因此必须作为 DLL 实现(由 API docs 强制执行)。这意味着您不能在 Python 进程中执行此操作。这也包含在 Python win32 文件中 here .
这意味着您需要编写 native DLL 来挂接消息,然后使用您最喜欢的 IPC 形式(例如,将消息发布到另一个窗口)将任何有趣的事件传递给您的 Python 进程。
如果你真的只是想要 AutoHotKey 的 Python 绑定(bind),你可以使用 pyahk为你做这件事。
关于python - wxPython:全局捕获关键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31640928/