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