Python win32gui 应用程序 - 试图从外部线程退出

Python win32gui application - trying to quit from external thread

我有一个 python 应用程序,它使用通过 win32 创建的托盘图标来控制 tkinter GUI。托盘图标可以向 tkinter GUI (hide/show/close/etc.) 发出命令,但由于它在单独的线程中,因此不会接受来自 tkinter GUI 的命令(例如退出程序)。

我在这里找到了一个回复,概述了访问托盘图标线程的过程:

  1. 从 GetWindowThreadProcessId() 获取托盘图标的线程 ID
  2. 使用 SetWindowsHookEx() 安装消息挂钩
  3. 使用消息钩子触发托盘图标线程的退出命令

这听起来很简单,但我不清楚如何在实践中实现它。

第 1 步很简单:

tid, pid = win32process.GetWindowThreadProcessId(self.hwnd)

有人可以提供有关步骤 2 和 3 的格式的 example/guidance 吗?

IInspectable 在评论中建议的解决方案是直接使用 PostMessage,如下所示:

win32gui.PostMessage(self.hwnd, win32con.WM_CLOSE, 0, 0)

这允许 tkinter GUI 告诉 win32 托盘图标退出,而不会遇到与线程相关的访问错误。