Ho uno script in cui utilizzo win32com per interagire con un servizio COM. Funziona come previsto quando il programma è già aperto. Mi collego ad esso usando win32com.client.dynamic.Dispatch, quindi interagisco con un documento che dovrebbe essere già aperto. Supponendo che il programma sia già aperto, posso verificare facilmente se un documento è aperto, ma non sono sicuro di come verificare se il programma è già aperto o meno. Quando uso il Dispatch menzionato, avvia il programma solo se non è già aperto, che non è quello che voglio.Python/win32com - Verifica se il programma è aperto
6
A
risposta
10
provare il metodo win32com.client.GetActiveObject(). Questo è quello che uso in alcune funzioni di convenienza che ho scritto, questo per 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 è solo un'altra funzione convenienza per l'apertura di nuove istanze dell'oggetto applicazione di Excel.