2013-03-01 12 views
6

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

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.