Python/win32com - 检查程序是否打开

9 投票
1 回答
13160 浏览
提问于 2025-04-17 17:36

我有一个脚本,里面用到了win32com来和一个COM服务进行互动。当这个程序已经打开的时候,一切都能正常工作。我是通过win32com.client.dynamic.Dispatch来连接它,然后和一个应该已经打开的文档进行操作。假设这个程序已经打开,我可以很容易地检查一个文档是否已经打开,但我不太确定怎么检查这个程序本身是否已经打开。当我使用上面提到的Dispatch时,如果程序没有打开,它就会自动启动,这不是我想要的。

1 个回答

21

试试使用 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 应用实例。

撰写回答