Page 1 of 1

Save file list and open as tree

Posted: Sat Jun 15, 2024 7:16 pm
by AZJIO
Has anyone tried to perform such a task?

Code: Select all

+ Imagine
|	+ Cache
|	|	|---Thumbs.db
+ ImgBurn
|	+ Log Files
|	|	|---ImgBurn.log
And the ability to read such a list in TreeGadget

Not working code. I converted it from AutoIt3

Code: Select all

EnableExplicit

; https://www.purebasic.fr/english/viewtopic.php?t=80897
XIncludeFile "WinGetHandle.pb"

Global  hTreeView, FilePath$
Global sList$  ; Result, where we return the data

; Path$ = (GetPathPart(ProgramFilename()))

Global Dim aListTree$(3)
aListTree$(0) =  "|" + #TAB$
aListTree$(1) = "+----"
aListTree$(2) = "-----"

; Structure TVITEMEX
; 	mask.l
; 	PB_Alignment1.b[4]
; 	hItem.i
; 	state.l
; 	stateMask.l
; 	*pszText
; 	cchTextMax.l
; 	iImage.l
; 	iSelectedImage.l
; 	cChildren.l
; 	lParam.i
; 	iIntegral.l
; 	PB_Alignment2.b[4]
; EndStructure


; Recursive tree reading
Procedure __TreeViewToText(hItem, sIndent$)
	Protected tmp$, pItem.TVITEMEX
	Protected f$, sIndentChild$
	Repeat
		Debug "hItem = " + hItem
		pItem\Mask = #TVIF_CHILDREN
		pItem\hItem = hItem
		SendMessage_(hTreeView, #TVM_GETITEM, 0, @pItem) ; Checking the plus sign. Also checks whether to run a nested clause query
		If pItem\cChildren <> 0
			f$ = aListTree$(1)
		Else
			f$ = aListTree$(2)
		EndIf
		pItem\Mask = #TVIF_TEXT
		pItem\cchTextMax = 4096
		tmp$ = Space(pItem\cchTextMax)
		pItem\pszText = @tmp$
		SendMessage_(hTreeView, #TVM_GETITEM, 0, @pItem)
		Debug tmp$
; 		tmp$ = PeekS(pItem\pszText)
		sList$ + sIndent$ + f$ + tmp$ + #CRLF$ ; Item text
		
		If pItem\cChildren <> 0
			hItem = SendMessage_(hTreeView, #TVM_GETNEXTITEM, #TVGN_CHILD, hItem) ; Requesting the first child item
			sIndentChild$ =  sIndent$ + aListTree$(0)
			__TreeViewToText(hItem, sIndentChild$)
		EndIf
		
		hItem = SendMessage_(hTreeView, #TVM_GETNEXTITEM, #TVGN_NEXT, hItem) ; Requesting the next item
	Until hItem = #Null ; If not a handle, then an output
EndProcedure

; Конвертирует содержимое TreeView в форматированный текст
Procedure _TreeViewToText(sList$, hTreeView)
	Protected hItem
	hItem = SendMessage_(hTreeView, #TVM_GETNEXTITEM, #TVGN_ROOT, hItem)
	__TreeViewToText(hItem, "")
EndProcedure   ;==>_TreeToTxt



Procedure _SaveList()
	Protected StartTime, hWnd
; 	hWnd = WinGetHandle(0, "FileSizesList, (29120 пунктов, за 8 с 805 мс)", 1, #Title, 1) ; 
; 	hWnd = WinGetHandle(0, "Справка PureBasic 5.73 (2024.04.13)", 1, #Title, 1) ; 
	hWnd = WinGetHandle(0, "Reference PureBasic", 1, #Title, 1) ; 
	; hWnd = WinGetHandle(0, "#32770", 1, #Class, 0) ; #32770
	Debug "hWnd = " + hWnd
	If hWnd
		hTreeView = WinGetHandle(hwnd, "SysTreeView32", 1, #Class, 0)  ; Window -> SysTreeView32
		Debug "hTreeView = " + hTreeView
	EndIf
	
; 	If hWnd
; 		hTab = WinGetHandle(hwnd, "SysTabControl32", 1, #Class, 0)  ; Window -> SysTabControl32
; 		Debug "SysTabControl32 = " + hTab
; 	EndIf
; 	
; 	If hTab
; 		hTreeView = WinGetHandle(hTab, "SysTreeView32", 1, #Class, 0)  ; Window -> SysTreeView32
; 		Debug "hTreeView = " + hTreeView
; 	EndIf

	If Not hTreeView
		MessageRequester("Message", "hTreeView element not found", 0)
		End
	EndIf

	StartTime = ElapsedMilliseconds()
	_TreeViewToText(sList$, hTreeView)
	Debug "e has passed " + Str(ElapsedMilliseconds() - StartTime) + " ms"
	
	FilePath$ = "C:\Temp\FileList.txt"
	#File = 0
	If CreateFile(#File, FilePath$)
		WriteStringFormat(#File, #PB_UTF8)
		WriteString(#File, sList$, #PB_UTF8)
		CloseFile(#File)
	EndIf
EndProcedure
; Depth", "|" + @Tab)
; Folder", "+----")
; File", "-----")

_SaveList()