da_*_*m_n 7 python com pywin32
我试图在python中使用一些COM对象做一个示例应用程序.我已经从Win32上的Python编程中读到了着名的第12章,但是关于这个问题,它只说明:
所有事件处理都是使用普通
IConnectionPoint接口完成的,虽然超出了本书的范围,但标准Python COM框架完全支持.
任何人都可以对此有所了解吗?我需要一个简单的入门样本.类似于为此示例添加代码以捕获电子表格的OnActivate事件
import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
...
Run Code Online (Sandbox Code Playgroud)
我没有自动化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
Run Code Online (Sandbox Code Playgroud)
然后在主循环中:
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
Run Code Online (Sandbox Code Playgroud)
编辑以获取主循环的更多详细信息:
当某些事情发生时,回调不会立即被调用; 相反,你必须调用PumpWaitingMessages(),它检查是否有任何事件等待,然后调用适当的回调.
如果你想在发生这种情况时做其他事情,你必须在一个单独的线程中运行循环(参见线程模块); 否则它只能位于脚本的底部.在我的例子中,我在一个单独的线程中运行它,因为我还运行了一个GUI; shutting_down变量是一个threading.Event,你可以用来告诉循环线程停止.
| 归档时间: |
|
| 查看次数: |
3495 次 |
| 最近记录: |