我有一个脚本,我使用win32com与COM服务进行交互。程序已经打开时,它可以正常工作。我使用win32com.client.dynamic.Dispatch连接到它,然后与应该已经打开的文档进行交互。假设程序已经打开,我可以轻松检查文档是否打开,但我不确定如何检查程序是否已打开。当我使用上面提到的Dispatch时,它只是启动程序,如果它还没有打开,这不是我想要的。
答案 0 :(得分:13)
尝试win32com.client.GetActiveObject()方法。这就是我在一些便利函数中使用的函数,这个函数用于Excel:
def Excel(visible=True):
'''Get running Excel instance if possible, else
return new instance.
'''
try:
excel = win32com.client.GetActiveObject("Excel.Application")
print("Running Excel instance found, returning object")
except:
excel = new_Excel(visible=visible)
print("No running Excel instances, returning new instance")
else:
if not excel.Workbooks.Count:
excel.Workbooks.Add(1)
excel.Visible = visible
return excel
new_Excel只是另一个用于打开Excel应用程序对象的新实例的便捷函数。