如何解决如何在后台运行win32gui.PumpMesssages?
我正在用python编写应用程序,该应用程序通过Windows Messages与c ++应用程序通信。我能够使用win32gui
和win32con
创建一个窗口并映射一个回调函数。该代码如下所示:
import win32api,win32con,win32gui
class MessageWindow(object):
def __init__(self,queue=None):
self._hwnd = None
@property
def hwnd(self):
return self._hwnd
def create_handle(self):
message_map = {
(win32con.WM_USER + 2): self.OnMessageReceived,win32con.WM_DESTROY: self.OnDestroy
}
wnd = win32gui.WNDCLASS()
wnd.lpfnWndProc = message_map
wnd.lpszClassName = 'MessageWindowClass'
hinst = wnd.hInstance = win32api.GetModuleHandle(None)
classAtom = win32gui.RegisterClass(wnd)
self._hwnd = win32gui.CreateWindow(
classAtom,'MessageHandler',win32con.CW_USEDEFAULT,hinst,None
)
def listen(self):
win32gui.PumpMessages()
def OnMessageReceived(self,hwnd,msg,wparam,lparam):
print(f'Window Handle: {hwnd} Type of Window Handle: {type(hwnd)}')
print(f'Message: {msg} Type of Message: {type(msg)}')
print(f'Wparam: {wparam} Type of Wparam: {type(wparam)}')
print(f'Lparam: {lparam} Type of Lparam: {type(lparam)}')
def OnDestroy(self,lparam):
win32gui.PostQuitMessage(0)
上面的类正在处理程序类中实例化,该类将等待从c ++应用程序接收消息(由于它是NDA的一部分,所以我无法显示这部分代码),但是我想做些什么有一个独立的线程可以在后台从listen
类运行MessageWindow
,而我可以做一些工作。
现在,仅当PumpMessages
调用是主线程的一部分时,我才能从c ++应用程序接收消息。
当我从子线程中调用它时,它不起作用。当c ++应用程序发送了用户消息并且我正在使用OnMessageReceived
退出OnDestroy
循环时,就会触发PumpMessages
回调。
任何人都可以建议如何在后台运行PumpMessages
。如果无法做到这一点,那么有什么解决方法可以在后台监听消息,而不必阻塞主线程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。