Explorer COM-Schnittstelle?

  • kurze Frage: gibt es eine sauberere Lösung den Windows(File)Explorer zu steuern etwa über eine COM-Schnittstelle o.ä.?

    Gruß

    Blues

    • Offizieller Beitrag

    Ja, das gibt es.
    Hier mal eine Funktion, die ich erstellt habe um markierte Dateien im Explorer abzufragen. Weitere Methoden zum Objekt "Shell.Application" kannst du bei MSDN abfragen.

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name....: _ActiveExplorer_GetFilesSelected
    ; Description......: Erstellt ein Array mit
    ; - Anzahl der markierten Dateien
    ; - dem Pfad des aktiven Explorerfensters und
    ; - dem/den Pfad/en der markiert/en Datei/en
    ; Parameter(s).....: keine
    ; Requirement(s)...: offenes Explorerfenster
    ; Return Value(s)..: Array mit den Daten, $a[0] = Anzahl, $a[1] = Ordnerpfad, $a[2..] = Dateiname
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _ActiveExplorer_GetFilesSelected()
    Local $oShell = ObjCreate("Shell.Application")
    Local $oExplorer, $sPath, $oFolderView, $iCount = 0, $sSelectedFiles = '', $n = 2
    For $i = 0 To $oShell.Windows.Count - 1
    $oExplorer = $oShell.Windows($i)
    $sPath = StringReplace(StringReplace(StringTrimLeft($oExplorer.LocationURL, 8), '%20', ' '), '/', '\')
    If WinGetTitle('[ACTIVE]') = $sPath Then ExitLoop
    Next
    $oFolderView = $oExplorer.Document.SelectedItems()
    $iCount = $oFolderView.Count
    Local $aOut[$iCount +2]
    $aOut[0] = $iCount
    $aOut[1] = $sPath
    If $iCount = 0 Then
    ReDim $aOut[3]
    $aOut[2] = 'NO FILE SELECT'
    Else
    For $oFolderItem In $oFolderView
    $aOut[$n] = $oFolderItem.Name
    $n += 1
    Next
    EndIf
    Return $aOut
    EndFunc ; ==>_ActiveExplorer_GetFilesSelected

    [/autoit]
  • Vielen Dank BugFix,

    Ich dachte mir schon dass das Senden von Texten an die Windows-Explorer-Adressezeile wie viele andere
    Aktionen eher an Verzweiflungslösungen erinnern.

    shell.Application scheint sehr mächtig zu sein. Ehrlich gesagt brummt mir gerade der Schädel irgendwie
    den Unterschied zwischen den ganzen Schnittstellen die ich gefunden habe zu verstehen:

    shell.Application
    WScript.Shell
    Shell.Explorer
    Scripting.XXX
    VBScript


    Koppeln all diese Schittstellen am Ende an das selbe an? Gibt es noch andere relevante um Windows zu steuern?
    Kann mir mal ein Experte ein wenig Klarheit verschaffen?

    tausend Dank


    Gruß

    Blues

  • Wer hätte gedacht, dass sich hinter einer so technischen Frage soviel Philosophie verbirgt.

    Aber gut, habe verstanden. Hätte ja sein können es handelt sich blos um verschiede Zugänge oder veraltete Schnittstellen etc...


    wobei ich immerhin schon herausgefunden zu glauben habe, dass shell.explorer = IE und shell.application = WinE


    Danke

    Gruß

    Blues