Mostrar arquivos no Painel de Navegação (Exibição de Árvore) no Windows Explorer?

4

O painel de navegação (árvore) no lado esquerdo do Windows Explorer (no Windows 7) mostra apenas pastas e não arquivos, como mostrado abaixo:

enter image description here

Existe de qualquer maneira para mostre arquivos também? Eu estou procurando algo semelhante ao que é fornecido em IDEs modernos ou editores de texto como o Sublime). Por exemplo, isso é o que parece no Sublime:

enter image description here

Niko Bellic
fonte
Isso também pode ser alcançado usando o TreeView by JAM eu acho jam-software.com/treesize_free
Dave
Por que não usar sublime?
Dave

Respostas:

6

Eu não posso garantir a versão mais recente do TextPad porque eu não tentei. No entanto, o Textpad v5.4.2 possui uma árvore de pastas / arquivos persistentes. Ver & gt; explorador.



O Notepad ++ tem um plugin chamado Light Explorer que faz o Tree View com arquivos. Para instalar:

  1. Download do Notepad ++
  2. Plugins & gt; Gerenciador de plug-ins & gt; Mostrar gerenciador de plug-ins & gt; Disponível & gt; Explorador de luz
  3. Depois disso, ele adicionará uma pasta procurando atalho na barra de ferramentas superior

enter image description here



Você também pode executar o Light Explorer em sua própria instância separado de outro notepad ++ install. Vai levar um espaço separado na barra de tarefas, o que é legal. Ver abaixo:

enter image description here

  1. Faça o download do notepad ++ v5.7: https://notepad-plus-plus.org/download/v5.7.html (arquivo .zip)
  2. Baixe LightExplorer.dll (UNICODE) {Eu usei v2.0Unicode}: https://sourceforge.net/projects/npp-plugins/files/LightExplorer/
  3. copie / cole no diretório de plugins.
  4. Abra o Notepad ++ Plugins & gt; Light Explorer & gt; Explorador de luz
  5. Tela cheia Light Explorer
  6. Criar atalho do notepad ++. Exe
  7. Alterar ícone do atalho para um ícone de pasta para aparecer de forma diferente na barra de tarefas . Existem ícones de pastas em: C: \ Windows \ System32 \ shell32.dll


Aqui está um snippet Autoit da Yashied: https://www.autoitscript.com/forum/topic/124430-display-on-the-fly-a-directory-tree-in-a-treeview/

#Include <GUIConstantsEx.au3>
#Include <GUIImageList.au3>
#Include <GUITreeView.au3>
#Include <TreeViewConstants.au3>
#Include <WindowsConstants.au3>
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $hForm, $hTreeView, $hImageList, $hItem, $hNext, $hSelect = 0, $hInput, $Input, $Dummy1, $Dummy2
Global $X, $Y, $sPath, $sRoot = @HomeDrive

$hForm = GUICreate('MyGUI', 600, 600)
$Input = GUICtrlCreateInput('', 20, 20, 560, 19)
$hInput = GUICtrlGetHandle(-1)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateTreeView(20, 50, 560, 530, -1, $WS_EX_CLIENTEDGE)
$hTreeView = GUICtrlGetHandle(-1)
$Dummy1 = GUICtrlCreateDummy()
$Dummy2 = GUICtrlCreateDummy()

If _WinAPI_GetVersion() >= '6.0' Then
    _WinAPI_SetWindowTheme($hTreeView, 'Explorer')
EndIf

$hImageList = _GUIImageList_Create(16, 16, 5, 1)
_GUIImageList_AddIcon($hImageList, @SystemDir & '\shell32.dll', 3)
_GUIImageList_AddIcon($hImageList, @SystemDir & '\shell32.dll', 4)
_GUICtrlTreeView_SetNormalImageList($hTreeView, $hImageList)
$sRoot = StringRegExpReplace($sRoot, '\\+\Z', '')
$sPath = StringRegExpReplace($sRoot, '^.*\\', '')
If StringInStr($sPath, ':') Then
    $sRoot &= '\'
    $sPath &= '\'
EndIf

;_GUICtrlTreeView_BeginUpdate($hTreeView)
_TVUpdate($hTreeView, _GUICtrlTreeView_AddChild($hTreeView, 0, $sPath, 0, 0))
;_GUICtrlTreeView_EndUpdate($hTreeView)

GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUISetState()

_GUICtrlTreeView_Expand($hTreeView, _GUICtrlTreeView_GetFirstItem($hTreeView))

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Dummy1 ; Update
            GUISetCursor(1, 1)
            $hItem = _GUICtrlTreeView_GetFirstChild($hTreeView, GUICtrlRead($Dummy1))
            If $hItem Then
                While $hItem
                    $hNext = _GUICtrlTreeView_GetNextSibling($hTreeView, $hItem)
                    If Not _TVUpdate($hTreeView, $hItem) Then
                        _GUICtrlTreeView_Delete($hTreeView, $hItem)
                    EndIf
                    $hItem = $hNext
                WEnd
                _WinAPI_RedrawWindow($hTreeView)
            EndIf
            GUISetCursor(2, 0)
        Case $Dummy2 ; Menu
            $hItem = GUICtrlRead($Dummy2)
            $sPath = _TVGetPath($hTreeView, $hItem, $sRoot)

            ConsoleWrite('-------------------------------' & @CR)
            ConsoleWrite('Handle: ' & $hItem & @CR)
            ConsoleWrite('Path:   ' & $sPath & @CR)
            If _WinAPI_PathIsDirectory($sPath) Then
                ConsoleWrite('Type:   ' & 'Directory' & @CR)
            Else
                ConsoleWrite('Type:   ' & 'File' & @CR)
            EndIf
            ConsoleWrite('X:      ' & MouseGetPos(0) & @CR)
            ConsoleWrite('Y:      ' & MouseGetPos(1) & @CR)
            ConsoleWrite('-------------------------------' & @CR)

    EndSwitch
WEnd

Func _TVGetPath($hTV, $hItem, $sRoot)

    Local $Path = StringRegExpReplace(_GUICtrlTreeView_GetTree($hTV, $hItem), '([|]+)|(\\[|])', '\\')

    If Not $Path Then
        Return ''
    EndIf
    If Not StringInStr($Path, ':') Then
        Return StringRegExpReplace($sRoot, '(\\[^\\]*(\\|)+)\Z', '\\') & $Path
    EndIf
    Return $Path
EndFunc   ;==>_TVGetPath

Func _TVSetPath($hTV, $hItem, $sRoot)
    GUICtrlSetData($Input, _WinAPI_PathCompactPath($hInput, _TVGetPath($hTV, $hItem, $sRoot), 554))
    $hSelect = $hItem
EndFunc   ;==>_TVSetPath

Func _TVUpdate($hTV, $hItem)

    Local $hImageList = _SendMessage($hTV, $TVM_GETIMAGELIST)
    Local $Path = StringRegExpReplace(_TVGetPath($hTV, $hItem, $sRoot), '\\+\Z', '')
    Local $hSearch, $hIcon, $Index, $File

    $hSearch = FileFindFirstFile($Path & '\*')
    If $hSearch = -1 Then
        If Not @error Then
            If FileExists($Path) Then
;               If _WinAPI_PathIsDirectory($Path) Then
;                   ; Access denied
;               EndIf
            Else
                Return 0
            EndIf
        EndIf
    Else
        While 1
            $File = FileFindNextFile($hSearch)
            If @error Then
                ExitLoop
            EndIf
            If @extended Then
                _GUICtrlTreeView_AddChild($hTV, $hItem, $File, 0, 0)
            EndIf
        WEnd
        FileClose($hSearch)
    EndIf
    $hSearch = FileFindFirstFile($Path & '\*')
    If $hSearch = -1 Then

    Else
        While 1
            $File = FileFindNextFile($hSearch)
            If @error Then
                ExitLoop
            EndIf
            If Not @extended Then
                $hIcon = _WinAPI_ShellExtractAssociatedIcon($Path & '\' & $File, 1)
                $Index = _GUIImageList_ReplaceIcon($hImageList, -1, $hIcon)
                _GUICtrlTreeView_AddChild($hTV, $hItem, $File, $Index, $Index)
                _WinAPI_DestroyIcon($hIcon)
            EndIf
        WEnd
        FileClose($hSearch)
    EndIf
    Return 1
EndFunc   ;==>_TVUpdate

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

    Local $tNMTREEVIEW = DllStructCreate($tagNMTREEVIEW, $lParam)
    Local $hItem = DllStructGetData($tNMTREEVIEW, 'NewhItem')
    Local $iState = DllStructGetData($tNMTREEVIEW, 'NewState')
    Local $hTV = DllStructGetData($tNMTREEVIEW, 'hWndFrom')
    Local $ID = DllStructGetData($tNMTREEVIEW, 'Code')
    Local $tTVHTI, $tPoint

    Switch $hTV
        Case $hTreeView
            Switch $ID
                Case $TVN_ITEMEXPANDEDW
                    If Not FileExists(_TVGetPath($hTV, $hItem, $sRoot)) Then
                        _GUICtrlTreeView_Delete($hTV, $hItem)
                        If BitAND($iState, $TVIS_SELECTED) Then
                            _TVSetPath($hTV, _GUICtrlTreeView_GetSelection($hTV), $sRoot)
                        EndIf
                    Else
                        If Not BitAND($iState, $TVIS_EXPANDED) Then
                            _GUICtrlTreeView_SetSelectedImageIndex($hTV, $hItem, 0)
                            _GUICtrlTreeView_SetImageIndex($hTV, $hItem, 0)
                        Else
                            _GUICtrlTreeView_SetSelectedImageIndex($hTV, $hItem, 1)
                            _GUICtrlTreeView_SetImageIndex($hTV, $hItem, 1)
                            If Not _GUICtrlTreeView_GetItemParam($hTV, $hItem) Then
                                _GUICtrlTreeView_SetItemParam($hTV, $hItem, 0x7FFFFFFF)
                                GUICtrlSendToDummy($Dummy1, $hItem)
                            EndIf
                        EndIf
                    EndIf
                Case $TVN_SELCHANGEDW
                    If BitAND($iState, $TVIS_SELECTED) Then
                        If Not FileExists(_TVGetPath($hTV, $hItem, $sRoot)) Then
                            _GUICtrlTreeView_Delete($hTV, $hItem)
                            $hItem = _GUICtrlTreeView_GetSelection($hTV)
                        EndIf
                        If $hItem <> $hSelect Then
                            _TVSetPath($hTV, $hItem, $sRoot)
                        EndIf
                    EndIf
                Case $NM_RCLICK
                        $tPoint = _WinAPI_GetMousePos(1, $hTV)
                        $tTVHTI = _GUICtrlTreeView_HitTestEx($hTV, DllStructGetData($tPoint, 1), DllStructGetData($tPoint, 2))
                        $hItem = DllStructGetData($tTVHTI, 'Item')
                        If BitAND(DllStructGetData($tTVHTI, 'Flags'), $TVHT_ONITEM) Then
                            _GUICtrlTreeView_SelectItem($hTreeView, $hItem)
                            If Not FileExists(_TVGetPath($hTV, $hItem, $sRoot)) Then
                                _GUICtrlTreeView_Delete($hTV, $hItem)
                                $hItem = _GUICtrlTreeView_GetSelection($hTV)
                            Else
                                GUICtrlSendToDummy($Dummy2, $hItem)
                            EndIf
                            If $hItem <> $hSelect Then
                                _TVSetPath($hTV, $hItem, $sRoot)
                            EndIf
                        EndIf
                EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

O snippet acima tem os ícones corretos para cada arquivo. Não é tão rápido quanto o trecho abaixo. Nenhum recurso de arrastar N soltar. Mas eles definitivamente poderiam ser adicionados.


Heres outro snippet Autoit de spudw2k: https://www.autoitscript.com/forum/topic/80327-filebrowser-with-treeview/?do=findComment&comment=580714

#include <GUIConstantsEx.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#Include <GuiTreeView.au3>
#Include <File.au3>

$gui = GUICreate("File Browser", 362, 378, -1, -1)
$tree = GUICtrlCreateTreeView(0, 0, 361, 377)
GUICtrlSetFont(-1,10)
GUICtrlSetColor($tree, 0x00FF00)
GUICtrlSetBkColor($tree,0x000000)

$hImage = _GUIImageList_Create(16, 16, 5, 2)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 4)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 54)
_GUICtrlTreeView_SetNormalImageList($tree, $hImage)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

$root = _GUICtrlTreeView_AddChild($tree,"","C:",0)
GUISetState(@SW_SHOW)

While 1
    $msg = GUIGetMsg()
    If $msg= -3 Then ExitLoop
WEnd

Func _SearchFolder($folder,$parent,$level=0)
    If $level >= 1 Then Return
    $files = _FileListToArray($folder,"*",1)
    $folders = _FileListToArray($folder,"*",2)
    _FolderFunc($folders,$folder,$parent,$level)
    _FileFunc($files,$parent)
EndFunc

Func _FileFunc($files,$parent)
    For $i = 1 To UBound($files)-1
        _GUICtrlTreeView_AddChild($tree,$parent,$files[$i],1,1)
    Next
EndFunc

Func _FolderFunc($folders,$folder,$parent,$level)
    For $i = 1 To UBound($folders)-1
        $parentitem = _GUICtrlTreeView_AddChild($tree,$parent,$folders[$i],0)
        _SearchFolder($folder & "\" & $folders[$i],$parentitem,$level+1)
    Next   
EndFunc

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    $hWndTreeView = GUICtrlGetHandle($tree)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndTreeView
            Switch $iCode
                Case -451
                    $item = _GUICtrlTreeView_GetSelection($hWndTreeView)
                    $root = $item
                    If _GUICtrlTreeView_GetChildCount($hWndTreeView,$item) <= 0 Then
                        $txt = _GUICtrlTreeView_GetText($hWndTreeView,$item)
                        Do
                            $parent = _GUICtrlTreeView_GetParentHandle($hWndTreeView,$item)
                            If $parent <> 0 Then
                                $txt = _GUICtrlTreeView_GetText($hWndTreeView,$parent) & "\" & $txt
                                $item = $parent
                            EndIf
                        Until $parent = 0
                        _SearchFolder($txt,$root)
                    EndIf
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc

O snippet acima não possui os ícones corretos para cada arquivo, mas é surpreendentemente rápido. Sem arrastar N soltar.



Aqui está Código-fonte .NET Isso faz exatamente o que você está pedindo. Tudo o que você precisa fazer é modificar para atender às suas necessidades:

https://code.msdn.microsoft.com/windowsapps/File-System-Tree-View-3a28325c

Para aqueles que não têm a capacidade de modificar a fonte, peguei o código-fonte acima, fiz pequenas modificações e compilei o código-fonte. executável . Aqui está:

https://www.dropbox.com/s/xb4f3skrcs20om4/ExplorerTreee.zip?dl=1



Alternativamente, existe um programa chamado QTTabBar que pode fazer isso na forma de menus de contexto:

enter image description here

Existem duas versões deste programa. 1038 tem uma desculpa instalar pacote, mas é cheio de recursos e impressionante. 1.5.0.0 Beta 2 tem um pacote de instalação impressionante, mas não é tão impressionante e não tem tantos recursos.

Versão impressionante 1038

Plugins impressionantes da versão 1038

Versão impressionante 1038 plugins source

Bom instalador versão 1.5.0.0 Beta 2

Good installer version 1.5.0.0 Beta 2 todos os arquivos

Bom instalador versão 1.5.0.0 Beta 2 código fonte

Você provavelmente poderia fazer uma plugar para o versão impressionante 1038 que teria uma exibição em árvore persistente com arquivos.

Você poderia modificar o código fonte do Good installer version 1.5.0.0 Beta 2 para obter o Tree View persistente com arquivos.

Às vezes, a incrível versão é instalada em alguns PCs. Eu tive problemas para instalar a versão impressionante no passado, e o que eu fiz para consertá-la é instalar a versão que tem o incrível instalador.

Jeff Luyet
fonte
1
Obrigado por editar, eu não tenho pontos suficientes para incorporar uma imagem .... e também postar duas URLs.
Jeff Luyet
1
QTTabBar parece ótimo, mas não tem exatamente o que eu quero. Tem um menu suspenso, mas não uma árvore persistente. O código-fonte .NET parece conter o que eu quero, mas infelizmente não sei o suficiente para ser capaz de ajustar e construir a partir do código-fonte. Alguma chance de encontrar um executável pré-construído?
Niko Bellic
1
@Jeff Luyet Por que preciso usar o np ++ v5.7 para essa solução específica?
wp78de
2
Claro, mais votos é uma vantagem, suponho, e ter duas respostas claras e concisas sendo separadas é outra para os leitores que estão procurando por tais soluções. Desta forma, existem duas soluções claras e não leitura através de um para chegar ao fim para iniciar o outro. Eu teria votado tanto se você tem dois, eu suponho, já que esta é uma pergunta de tipo de recomendação de software com uma recompensa, a menos que haja um hack para fazer o Windows Explorer dar a solução. Você é o único que respondeu, mas a mesma resposta - que é perfeitamente boa e sua escolha também. O comentário foi apenas FYI.
Pimp Juice IT
2
hrmm .. bom ponto @ McDonald's. Obrigado por dedicar seu tempo para responder. Eu posso começar a fazer isso no futuro. Eu definitivamente vou ter que pensar mais sobre isso.
Jeff Luyet