使用Python中的COM事件
我正在尝试用python编写一个示例应用程序,它使用一些COM对象。我已经阅读了著名的关于Win32上Python编程的第12章,但关于这个问题,它只说明: 所有事件处理都是使用 正常使用Python中的COM事件,python,com,pywin32,Python,Com,Pywin32,我正在尝试用python编写一个示例应用程序,它使用一些COM对象。我已经阅读了著名的关于Win32上Python编程的第12章,但关于这个问题,它只说明: 所有事件处理都是使用 正常i连接点接口, 尽管超出了本文的范围 这本书,得到了 标准Python COM框架 有人能解释一下吗?我需要一个简单的起动器样品。类似于将代码添加到此示例以捕获电子表格的OnActivate事件 import win32com.client xl = win32com.client.Dispatch("Excel.
i连接点
接口,
尽管超出了本文的范围
这本书,得到了
标准Python COM框架
有人能解释一下吗?我需要一个简单的起动器样品。类似于将代码添加到此示例以捕获电子表格的OnActivate事件
import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
...
我没有使用自动Excel,但我正在使用Microsoft的一些代码,这些代码可能非常类似,足以让您开始使用:
ListenerBase = win32com.client.getevents("SAPI.SpInProcRecoContext")
class Listener(ListenerBase):
def OnRecognition(self, _1, _2, _3, Result):
"""Callback whenever something is recognized."""
# Work with Result
def OnHypothesis(self, _1, _2, Result):
"""Callback whenever we have a potential match."""
# Work with Result
随后在主循环中:
while not self.shutting_down.is_set():
# Trigger the event handlers if we have anything.
pythoncom.PumpWaitingMessages()
time.sleep(0.1) # Don't use up all our CPU checking constantly
有关主循环的更多详细信息,请编辑:
while not self.shutting_down.is_set():
# Trigger the event handlers if we have anything.
pythoncom.PumpWaitingMessages()
time.sleep(0.1) # Don't use up all our CPU checking constantly
当某些事情发生时,回调不会立即被调用;相反,您必须调用PumpWaitingMessages(),它检查是否有任何事件等待,然后调用相应的回调函数
如果您想在发生这种情况时执行其他操作,则必须在单独的线程中运行循环(请参阅线程模块);否则,它可能只是位于脚本的底部。在我的示例中,我在一个单独的线程中运行它,因为我还运行了一个GUI;关闭变量是一个线程事件。您可以使用该事件通知循环线程停止。谢谢。你能详细介绍一下第二部分(循环)吗?抱歉打扰了,我刚开始使用pyhton:)。:)我知道消息循环是什么-我似乎找不到pythoncom-这是我需要导入的包吗?另外,我看到还有一个DispatchWithEvents方法——我会在有时间讨论这个问题时进行研究;它应该随您的Python Win32 Extensions安装一起提供(安装Pythonwin等)。@Kiv有没有一种方法不必调用
time.sleep(0.1)
?