Hallo zusammen, ich mal wieder ![]()
ich sitze an einem neuen Script, das mir bei Ausführung bestimmte Ordner und Programme öffnen soll. Die Ordner sollen unter Windows 11 in einem neuen Explorer-Tab geöffnet werden. Meine erste Version macht das über den Send-Befehl, was auch klappt. Nun möchte ich das aber sauberer über die Windows API lösen. Ist das überhaupt machbar? Ich bräuchte da mal Eure Hilfe ![]()
Vielen Dank
OhnePlan
AutoIt
#include "File.au3"
Global $sTxtName = "OpenElementsList.txt"
FileInstall(".\OpenElementsList.txt", ".\OpenElementsList.txt")
Global $sProgramVersion = "0.0.1.7"
Global $sProgramName = "OpenElements"
Global $sTxtFile = @ScriptDir & "\" & $sTxtName
Global $arFolderPaths
Global $iSleepTime = 300
Global $bWin11 = False
Global $iStart = 0
Global $sWinVersion = @OSVersion
If Not FileExists($sTxtFile) Then
MsgBox(16, "Fehler", "Die Textdatei " & $sTxtName & " wurde nicht gefunden.")
Exit
EndIf
_FileReadToArray($sTxtFile, $arFolderPaths)
If @error Then
MsgBox(16, "Fehler", "Beim Lesen der Textdatei ist ein Fehler aufgetreten. Error: " & @error & @CRLF & @CRLF & $sTxtName & " darf nicht leer sein")
Exit
EndIf
If IsNumber($arFolderPaths[0]) Then _ArrayDelete($arFolderPaths, 0)
For $i = 0 To UBound($arFolderPaths) - 1
$arFolderPaths[$i] = _RemoveTrailingSlash($arFolderPaths[$i])
Next
; Iteriere über die Pfade im Array und entferne nicht existierende Pfade
For $i = UBound($arFolderPaths) - 1 To $iStart Step -1 ; Rückwärts durch das Array iterieren
If Not FileExists($arFolderPaths[$i]) Then
_ArrayDelete($arFolderPaths, $i)
EndIf
Next
_FileWriteFromArray($sTxtFile, $arFolderPaths)
If $sWinVersion = "WIN_11" Then $bWin11 = True
If Not WinExists("[CLASS:CabinetWClass]") Then
$iStart = 1
ShellExecute($arFolderPaths[0])
WinWait("[CLASS:CabinetWClass]")
Else
WinActivate("[CLASS:CabinetWClass]")
EndIf
For $i = $iStart To UBound($arFolderPaths) - 1
If StringInStr(FileGetAttrib($arFolderPaths[$i]), "D") Then
If $bWin11 Then
If _TabExists($arFolderPaths[$i]) Then ContinueLoop
_OpenFolderInNewTab($arFolderPaths[$i])
EndIf
Else
ShellExecute($arFolderPaths[$i])
EndIf
Next
Exit
Func _TabExists($_sPath)
Local $oShellWindows = ObjCreate("Shell.Application").Windows
For $oExplorer In $oShellWindows
If StringInStr($oExplorer.Document.Folder.Self.Path, $_sPath) Then
Return True
EndIf
Next
Return False
EndFunc
Func _RemoveTrailingSlash($sPath)
If StringRight($sPath, 1) = "/" Or StringRight($sPath, 1) = "\" Then
Return StringTrimRight($sPath, 1)
Else
Return $sPath
EndIf
EndFunc
Func _OpenFolderInNewTab($_sPath)
$objShellWindows = ObjCreate("Shell.Application").Windows
$objShell = ObjCreate("Shell.Application")
For $objExplorer In $objShellWindows
If StringInStr($objExplorer.Document.Folder.Self.Path, $_sPath) Then
$objExplorer.Navigate2($_sPath, 0x1000)
Return
EndIf
Next
$objShell.Open($_sPath)
EndFunc
Alles anzeigen