Ich habe doch schon gesagt, wie es einfach geht. Einfach den Pfad auslesen über das Objekt:
[autoit]$oExcel = ObjGet("","Excel.Application") ; Referenz auf die offene Excelanwendung
$oBook = $oExcel.ActiveWorkbook() ; das aktive Workbook ermitteln
ConsoleWrite('Pfad des aktuellen Workbooks: ' & $oBook.Path() & '\' & $oBook.Name() & @CRLF)
Analaog gilt das auch für Word und Access. Welche Methoden/Eigenschaften verwendet werden, verrät uns Tante Google (Suchbegriff: Anwendung Objekt Methoden) ![]()
Damit es multiprogrammfähig ist, brauchst du doch nur versuchen Referenzen auf die unterschiedlichen Objekte zu erhalten. Klappt es nicht, ist auch die Anwendung nicht offen. Kannst du dann einfach per Switch durchwandern.
Edit:
Ich hab mal schnell solche Funktion erstellt, kannst du ja noch erweitern. Infos zu den Objekten findest du hier.
Spoiler anzeigen
ConsoleWrite(_GetPathFromApp('Powerpoint') & @CRLF)
[/autoit] [autoit][/autoit] [autoit]Func _GetPathFromApp($_sApp)
Local $o
Switch $_sApp
Case 'Word'
$o = ObjGet("","Word.Application")
If Not IsObj($o) Then Return ''
Return $o.ActiveDocument.Path() & '\' & $o.ActiveDocument.Name()
Case 'Excel'
$o = ObjGet("","Excel.Application")
If Not IsObj($o) Then Return ''
Return $o.ActiveWorkbook.Path() & '\' & $o.ActiveWorkbook.Name()
Case 'Access'
$o = ObjGet("","Access.Application")
If Not IsObj($o) Then Return ''
Return $o.CurrentProject.FullName() ; kann ich mangels Access nicht testen
Case 'Powerpoint'
$o = ObjGet("","Powerpoint.Application")
If Not IsObj($o) Then Return ''
Return $o.ActivePresentation.FullName()
EndSwitch
EndFunc