win32com.client.DispatchWithEvents 对于同一线程中的多个对象
win32com.client.DispatchWithEvents for multiple objects in the same thread
我正在尝试使用以下代码同时在 2 个单独的收件箱中监听 OnItemAdd 事件:
class Handler_Class():
def OnItemAdd(self, mail):
#Check if the item is of the MailItem type
if mail.Class==43:
print(mail.Subject, " - ", mail.Parent.FolderPath)
inboxes = ["inbox1", "inbox2"]
for inbox in inboxes:
items = win32com.client.DispatchEx("Outlook.Application").GetNamespace("MAPI").Folders[inbox].Folders["Inbox"].Items
win32com.client.DispatchWithEvents(items, Handler_Class)
print(datetime.now(),"Ready to pump")
pythoncom.PumpMessages()
pythoncom.PumpMessages() 似乎不起作用。如果我重构代码以仅侦听一个收件箱的项目,它确实有效。
关于如何解决这个问题有什么想法吗?
这是不可能的,我通过在一个线程中初始化所有 DispatchWithEvents 对象并使用 pythoncom.PumpMessages() 来解决这个问题。
这样可以同时监听多个收件箱中的ItemAdd等事件。
我正在尝试使用以下代码同时在 2 个单独的收件箱中监听 OnItemAdd 事件:
class Handler_Class():
def OnItemAdd(self, mail):
#Check if the item is of the MailItem type
if mail.Class==43:
print(mail.Subject, " - ", mail.Parent.FolderPath)
inboxes = ["inbox1", "inbox2"]
for inbox in inboxes:
items = win32com.client.DispatchEx("Outlook.Application").GetNamespace("MAPI").Folders[inbox].Folders["Inbox"].Items
win32com.client.DispatchWithEvents(items, Handler_Class)
print(datetime.now(),"Ready to pump")
pythoncom.PumpMessages()
pythoncom.PumpMessages() 似乎不起作用。如果我重构代码以仅侦听一个收件箱的项目,它确实有效。
关于如何解决这个问题有什么想法吗?
这是不可能的,我通过在一个线程中初始化所有 DispatchWithEvents 对象并使用 pythoncom.PumpMessages() 来解决这个问题。
这样可以同时监听多个收件箱中的ItemAdd等事件。