Jump to content
Sign in to follow this  
09stephenb

File browser with icon's.

Recommended Posts

This is my code so far.

#include <GUIConstantsEx.au3>
#include <File.au3>
#include <GUIConstants.au3>
#include <array.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <GuiListView.au3>
#include <APIRegConstants.au3>
#include <WinAPIReg.au3>
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
HotKeySet("{esc}","exitx")
HotKeySet("{f5}","regen")
$valpath=@ScriptDir&"\Vault"
$rootpath=$valpath
$largeicons=1
$menu=GUICreate("Vault", 700, 400, -1, -1, -1, $WS_EX_ACCEPTFILES)
$browsevault=GUICtrlCreateListView(" |     File / Folder name     |      Size     ", 0, 0, 700, 400)
_GUICtrlListView_SetExtendedListViewStyle($browsevault, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
GUISetState()
regen()
$DoubleClicked = False
While 1
   Sleep(100)
    If $DoubleClicked Then
        DoubleClickFunc()
        $DoubleClicked = False
    EndIf
WEnd
Func DoubleClickFunc()
       $Select = ControlListView($menu, "", $browsevault, "GetSelected")
    $item=ControlListView($menu, "", $browsevault, "GetText", $Select, 1)
    If DirGetSize($valpath&"\"&$item) <> "-1" Then
       $valpath=$valpath&"\"&$item
       regen()
    EndIf
EndFunc
Func regen()
   _GUICtrlListView_DeleteAllItems($browsevault)
   $hImage = _GUIImageList_Create(24, 24 ,5 ,3)
   _GUIImageList_AddIcon($hImage,@WindowsDir&"\System32\Shell32.dll",4,$largeicons)
   $icon_array=_FileListToArrayRec($valpath,"*",1)
   $minus=0
   $iIndex = _ArraySearch($icon_array, "Desktop.ini", 1, 0, 0, 1)
   If Not @error Then
       _ArrayDelete($icon_array, $iIndex)
       $minus=1
   EndIf
   $iconindex=1
   For $i = 1 To $icon_array[0]-$minus
      Dim $a, $b, $c, $ext
      $pth=_PathSplit($valpath&"\"&$icon_array[$i],$a,$b,$c,$ext)
      If @error Then
         $pathtoico=$fileicopth
         $icoindex=0
      Else
         $ext=$pth[4]
         If $ext=".ico" Then
            $pathtoico=$icon_array[$i]
            $icoindex=0
         Else
            $fileicopth=$icon_array[$i]
            $str=_WinAPI_AssocQueryString($ext, $ASSOCSTR_DEFAULTICON)
            $end=0
            $loop=StringLen($str)
            If StringRight($str,4)=".ico" Then
               $pathtoico=$str
               $icoindex=0
            Else
               While $end<>1
                  If StringMid($str,$loop,1)="," Then
                     $end=1
                  EndIf
                  $loop=$loop-1
               Wend
               $strtrm=$loop-StringLen($str)+1
               $strtrm=($strtrm-$strtrm)-$strtrm
               $pathtoico=StringTrimRight($str,$strtrm+1)
               $icoindex=StringRight($str,$strtrm)
            EndIf
         EndIf
      EndIf
      _GUIImageList_AddIcon($hImage,$pathtoico,$icoindex,$largeicons)
      $iconindex=$iconindex+1
   Next
   _GUICtrlListView_SetImageList($browsevault, $hImage, 1)
   $line=1
   $folder_array=_FileListToArray($valpath,"*",2)
   If Not(@error) Then
      For $i = 1 To $folder_array[0]
         _GUICtrlListView_AddItem($browsevault,"", 0)
         _GUICtrlListView_AddSubItem($browsevault, $line-1, $folder_array[$i], 1, 1)
         _GUICtrlListView_AddSubItem($browsevault, $line-1, Round(DirGetSize($valpath&"\"&$folder_array[$i])/1048576,2)&" MB", 2, 1)
         $line=$line+1
      Next
   EndIf
   $dirend=$line
   $line=0
   $file_array=_FileListToArrayRec($valpath,"*",1)
   If Not(@error) Then
      $iIndex = _ArraySearch($file_array, "Desktop.ini", 1, 0, 0, 1)
      If Not @error Then
          _ArrayDelete($file_array, $iIndex)
      EndIf
      $icondex=1
      For $i = 1 To $file_array[0]-1
         _GUICtrlListView_AddItem($browsevault,"", $icondex)
         _GUICtrlListView_AddSubItem($browsevault, $line+$dirend-1, $file_array[$i], 1, 1)
         _GUICtrlListView_AddSubItem($browsevault, $line+$dirend-1, Round(FileGetSize($valpath&"\"&$file_array[$i])/1048576,2)&" MB", 2, 1)
         $line=$line+1
         $icondex=$icondex+1
      Next
   EndIf
EndFunc
Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $browsevault And $code = -3 Then $DoubleClicked = True
    Return $GUI_RUNDEFMSG
EndFunc
Func exitx()
   exit
EndFunc

It works with the root path but when i open the folders the icons stop working. Does anyone know what i am doing wrong.

Example of the problem: Link

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...