Что нового

визуализация древа папок из файла с последующими действиями над ними

kalpak44

Новичок
Сообщения
45
Репутация
1
Прет!! Нашел ка я однажды на этом форумце скриптик
Код:
#Include <GUIConstantsEx.au3>
#Include <GUIImageList.au3>
#Include <GUITreeView.au3>
#Include <TreeViewConstants.au3>
#Include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global Const $sFile = @ScriptDir & '\tree.txt'

Global $hForm, $hTreeView, $hImageList, $hFile, $sRoot

SplashTextOn(':-)', 'Wait...', 300, 100, Default, Default, 32, 'Tahoma', 18)

$hForm = GUICreate('MyGUI', 600, 600)
GUICtrlCreateTreeView(20, 20, 560, 560, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$hTreeView = GUICtrlGetHandle(-1)

$hFile = FileOpen(@ScriptDir & '\tree.txt')
$sRoot = FileReadLine($hFile)
If $sRoot Then
    $hImageList = _GUIImageList_Create(16, 16, 5, 1)
    _GUIImageList_AddIcon($hImageList, @SystemDir & '\shell32.dll', 3)
    _GUIImageList_AddIcon($hImageList, @SystemDir & '\shell32.dll', 4)
    _GUIImageList_AddIcon($hImageList, @SystemDir & '\shell32.dll', 0)
    _GUICtrlTreeView_SetNormalImageList($hTreeView, $hImageList)
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    _EnumPaths($sRoot)
    _GUICtrlTreeView_SetState($hTreeView, _GUICtrlTreeView_GetFirstItem($hTreeView), $TVIS_EXPANDED, 1)
    _GUICtrlTreeView_EndUpdate($hTreeView)
EndIf

FileClose($hFile)

GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

SplashOff()

GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _EnumPaths($sRoot, $hItem = 0)

    Local $hSubItem, $Data, $Dir, $Path

    While 1
        $Dir = StringSplit($sRoot, '\')
        If StringRight($Dir[$Dir[0] - 1], 1) = ':' Then
            $Dir[$Dir[0] - 1] &= '\'
        EndIf
        $hSubItem = _GUICtrlTreeView_AddChild($hTreeView, $hItem, $Dir[$Dir[0] - 1], 0, 1)
        While 1
            $Path = FileReadLine($hFile)
            Switch @error
                Case  0

                Case -1
                    Return 0
                Case Else
                    Return SetError(2, 0, 0)
            EndSwitch
            If Not $Path Then
                ContinueLoop
            EndIf
            $Dir = StringSplit($Path, '\')
            If $Dir[$Dir[0]] Then
                If StringRegExpReplace($Path, '\\.[^\\]*\Z', '\\') = $sRoot Then
                    _GUICtrlTreeView_AddChild($hTreeView, $hSubItem, $Dir[$Dir[0]], 2, 2)
                    ContinueLoop
                Else
                    Return SetError(1, 0, $Path)
                EndIf
            EndIf
            If StringRegExpReplace($Path, '\\.[^\\]*\\\Z', '\\') <> $sRoot Then
                Return $Path
            EndIf
            While 1
                $Data = $Path
                $Path = _EnumPaths($Path, $hSubItem)
                Switch @error
                    Case 1
                        _GUICtrlTreeView_AddChild($hTreeView, $hSubItem, StringRegExpReplace($Path, '^.*\\', ''), 2, 2)
                        ExitLoop
                    Case 2
                        Return SetError(2, 0, 0)
                EndSwitch
                If Not $Path Then
                    Return 0
                EndIf
                If StringRegExpReplace($Path, '\\.[^\\]*\\\Z', '\\') = $sRoot Then
                    ContinueLoop
                Else
                    Return $Path
                EndIf
            WEnd
        WEnd
    WEnd
EndFunc   ;==>_EnumPaths

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

    Local $tNMTREEVIEW = DllStructCreate($tagNMTREEVIEW , $lParam)
    Local $hTV = DllStructGetData($tNMTREEVIEW, 'hWndFrom')
    Local $ID = DllStructGetData($tNMTREEVIEW, 'Code')

    Switch $hTV
        Case $hTreeView
            Switch $ID
                Case $TVN_ITEMEXPANDEDA, $TVN_ITEMEXPANDEDW
                    _GUICtrlTreeView_SetImageIndex($hTreeView, DllStructGetData($tNMTREEVIEW, 'NewhItem'), BitAND(DllStructGetData($tNMTREEVIEW, 'NewState'), $TVIS_EXPANDED) = $TVIS_EXPANDED)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY


очень бы хотелось как нить иго изменить так чтобы
1) в инпуте гдет показывал путь файла или каталога
2) чтобы по двойному клику и/или правой кнопки мыши оп файлу/каталогу выводилось окошко/меню можн даже
Код:
MsgBox()
с адресом данного файла/каталога

для запуска мож воспользоваться этим скриптом к примеру

Код:
#Include <File.au3>

Opt('MustDeclareVars', 1)

Global Const $sRoot = RegRead('HKLM\SOFTWARE\AutoIt v3\AutoIt', 'InstallDir')
Global Const $sFile = @ScriptDir & '\tree.txt'

Global $hFile

$hFile = FileOpen($sFile, 2)
_EnumFiles($sRoot)
FileClose($hFile)

Func _EnumFiles($sRoot)

    Local $FileList

    FileWriteLine($hFile, $sRoot & '\')
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _EnumFiles($sRoot & '\' & $FileList[$i])
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 1)
    If Not @error Then
        For $i = 1 To $FileList[0]
            FileWriteLine($hFile, $sRoot & '\' & $FileList[$i])
        Next
    EndIf
EndFunc   ;==>_EnumFiles

:'( :'( :'( плииииииииз хэлп
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: Tree From Disk

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Tree From Disk" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Глобальный модератор.
 
Автор
K

kalpak44

Новичок
Сообщения
45
Репутация
1
прошу прощения, название темы изменил :ok:
 
Верх