gpt4 book ai didi

python - 在 Python 中使用 COM 事件

转载 作者:太空狗 更新时间:2023-10-29 21:48:00 25 4
gpt4 key购买 nike

我正在尝试使用一些 COM 对象在 python 中做一个示例应用程序。我已经阅读了 Python Programing on Win32 中著名的第 12 章,但关于这个问题,它只指出:

All event handling is done using normal IConnectionPoint interfaces, and although beyond the scope of this book, is fully supported by the standard Python COM framework.

任何人都可以阐明这一点吗?我需要一个简单的入门示例。类似于向此示例添加代码以捕获电子表格的 OnActivate 事件

import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
...

最佳答案

我没有自动化 Excel,但我正在使用 Microsoft 的 Speech API 中的一些代码这可能足以让你开始:

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

编辑主循环的更多细节:

当事情发生时,回调不会立即被调用;相反,您必须调用 PumpWaitingMessages(),它会检查是否有任何事件在等待,然后调用适当的回调。

如果你想在发生这种情况时做其他事情,你必须在一个单独的线程中运行循环(参见线程模块);否则它只能位于脚本的底部。在我的示例中,我在一个单独的线程中运行它,因为我还运行了一个 GUI; shutting_down 变量是一个 threading.Event,您可以使用它来告诉循环线程停止。

关于python - 在 Python 中使用 COM 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1244463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com