Bonjour à tous
voila depuis quelques semaines voir quelques mois
je cherche le moyen de gérer un liste de sélection de dossier / fichier pour la traiter ensuite avec
un compresseur comme 7 zip afin d'éffectuer des sauvegardes
Sur mes différentes recherches sur les forums anglais et ici je n'ai pas trouvez ce que je cherche
le meilleur exemple de ce que je recherche est le fonctionnement de la sélection de ntbackup
avec sauvegarde de cette sélection dans son fichier *.bks
j'ai pu marier 2 scripts téléchargés du forum anglais et j'arrive à ceci
► Afficher le texteCode
Code : Tout sélectionner
#include <GuiTreeView.au3>
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <TreeViewConstants.au3>
Dim $treeView[1]
Global $hTreeView
$hGui = GUICreate("TreeView Check All", 460, 300)
$TreeView[0] = GUICtrlCreateTreeView(20, 20, 420, 260, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), BitOR($WS_EX_DLGMODALFRAME,$WS_EX_CLIENTEDGE))
$hTreeView = GUICtrlGetHandle($TreeView[0])
;~ BuildExampleTree($TreeView) ;just a test
$Folder = FileSelectFolder ( "Selectionnez un dossier ou un disque", "")
_Populate($folder,$treeView[0])
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $hWndFrom, $idFrom, $iCode, $tNMHDR = DllStructCreate("hwnd hwndFrom;int idFrom;int code", $lParam)
$hWndFrom = DllStructGetData($tNMHDR, "hwndFrom")
$iCode = DllStructGetData($tNMHDR, "code")
If $hWndFrom = $hTreeView Then
Switch $iCode
Case $NM_CLICK
;;$tagTVHITTESTINFO = "int X;int Y;int Flags;int Item"
Local $tMPos = _WinAPI_GetMousePos(True, $hWndFrom), $tHit = _GUICtrlTreeView_HitTestEx($hWndFrom, DllStructGetData($tMPos, 1), DllStructGetData($tMPos, 2))
Local $hItem = DllStructGetData($tHit, "Item"), $iFlags = DllStructGetData($tHit, "Flags")
If $hItem <> 0 And BitAND($iFlags, $TVHT_ONITEMSTATEICON) Then
_TV_Checkbox_MultiSet($hWndFrom, $hItem, 1)
EndIf
Case $TVN_KEYDOWN
Local $tNMTVKEY = DllStructCreate("hwnd;int;int;short key;uint", $lParam)
Local $hSelected = _GUICtrlTreeView_GetSelection($hWndFrom)
If DllStructGetData($tNMTVKEY, "key") = 0x20 And $hSelected Then ;;space
_TV_Checkbox_MultiSet($hWndFrom, $hSelected, 1)
EndIf
Case Else
EndSwitch
EndIf
Return $GUI_RUNDEFMSG
EndFunc
Func _TV_Checkbox_MultiSet($hWnd, $hItem, $fTop = 0)
Local $fChecked = _GUICtrlTreeView_GetChecked($hWnd, $hItem)
If $fTop Then $fChecked = Not $fChecked
If _GUICtrlTreeView_GetChildren($hWnd, $hItem) Then
Local $hChild = _GUICtrlTreeView_GetFirstChild($hWnd, $hItem)
Do
_GUICtrlTreeView_SetChecked($hWnd, $hChild, $fChecked)
If _GUICtrlTreeView_GetChildren($hWnd, $hChild) Then
_TV_Checkbox_MultiSet($hWnd, $hChild)
EndIf
$hChild = _GUICtrlTreeView_GetNextChild($hWnd, $hChild)
Until $hChild = 0
EndIf
EndFunc
Func _Populate($current,$tree)
If StringRight($current,1) = "\" then $current = StringTrimRight($current,1)
Local $search = FileFindFirstFile($current & "\*.*")
While 1
Dim $file = FileFindNextFile($search)
If @error Or StringLen($file) < 1 Then ExitLoop
If Not StringInStr(FileGetAttrib($current & "\" & $file), "D") Then
Redim $treeView[Ubound($TreeView) +1]
$treeView[Ubound($TreeView) - 1] = GUICtrlCreateTreeViewItem($file,$tree)
EndIf
If StringInStr(FileGetAttrib($current & "\" & $file), "D") Then
Redim $treeView[Ubound($TreeView) +1]
$treeView[Ubound($TreeView) - 1] = GUICtrlCreateTreeViewItem($file,$tree)
GUICtrlSetColor(-1,0x2A2AFF)
_Populate($current & "\" & $file, $treeView[Ubound($TreeView) -1])
EndIf
WEnd
FileClose($search)
EndFunc
la récursivité fonctionne, par contre lorsque un fichier ou dossier est sélectionné au fin fond de l'arborescence
la 1er case reste vide. La différence de couleur entre dossier et fichier c'est util
Dans NTBACKUP cette 1er case est grisé pour dire que plus loin il y a une selection que l'on retrouve en suivant ces cases grisées.
Ce script est également très lent ( plusieurs minutes pour afficher un disque entier )
Je ne vois pas ( pour le moment ) comment sauvegarder une sélection
Je suis certain que cette demande à déjà été abordée ( cela devrait même, à mon sens, faire partie de fonction AUTOIT UDF ), mais je n'ai peut être pas su la définir dans mes recherches.
Voila c'est un vaste projet j'y mettrais quelques années certainement ( je suis trés lent )
j'attend vos sugestions
merci
a+ JL56