Cet utilitaire permet de réouvrir ses derniers répertoires de téléchargement, ou plus précisément ses répertoires sur lesquels on a utilisé la boîte de dialogue "Enregistrer sous..." ("Save As" dialog box).
La méthode consiste à copier la liste des répertoires contenus dans le registre OpenSaveMRU, et à afficher le résultat dans une boîte de dialogue puis, en cliquant sur un répertoire, à y accéder via Windows Explorer.
C'est simple et pratique, me semble-t-il !
Windows XP uniquement.
► Afficher le texte
Code : Tout sélectionner
;================================================================================================
;
; But
; permet de réouvrir ses répertoires de téléchargement, ou plus précisément
; les répertoires pour lesquels on a utilisé la boîte de dialogue "Enregistrer sous...".
;
; Méthode
; Il copie la liste des répertoires contenus dans le registre OpenSaveMRU, affiche le résultat
; dans une boîte de dialogue puis, en cliquant sur un répertoire, d'y accéder via Windows Explorer.
;
; Restriction
; Il ne peut être utilisé que sous Windows XP.
;
; Conseil :
; Pratique sous forme de raccourci bureau
; Inutile pour ceux qui utilisent toujours le même répertoire de téléchargement.
;
;==================================================================================================
;==================================
; ATTENTION : Windows XP uniquement
;==================================
#include <Constants.au3>
#include <File.au3>
#include <Array.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListView.au3>
#include <WindowsConstants.au3>
Local $szDrive, $szDir, $szFName, $szExt
Local $sClefs, $sOneClef, $sContent, $sLongName, $sFileName
Local $i
local $nwidth_max, $nheight_max
;== contenu du registre ==============================================================================
; lit le contenu d'OpenSaveMRU (par ex "dcba")
$sClefs = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\*", "MRUList")
; nombre de clefs contenues
$nClefs = StringLen($sClefs)
if $nClefs = "" Then
MsgBox(0,"Derniers répertoires", "vide",2)
Exit
Endif
Local $arr[$nClefs]
; affichage du contenu des clefs
For $i = 1 To StringLen($sClefs)
; de la 1ère à la dernière
$sOneClef = StringMid($sClefs, $i, 1)
$sContent = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\*", $sOneClef)
$sLongName = FileGetLongName($sContent)
; on extrait les chemins
$sFileName = _PathSplit($sLongName, $szDrive, $szDir, $szFName, $szExt)
; et on les mets dans un array
$arr[$i - 1] = $sFileName[1] & $sFileName[2]
Next
; enfin, on supprime les valeurs dupliquées de l'array
Local $aNewArray = _ArrayUnique($arr);Using Default Parameters
; et on calcule ses dimension en nbre de caractères (en vue d'un affichage correct)
$nwidth_max = 0
For $x=1 To UBound($aNewArray) - 1
$n = StringLen($aNewArray[$x])
If $n > $nwidth_max Then
$nwidth_max = $n
Endif
Next
$nheight_max = Ubound($aNewArray)
;== menu ===============================================================================
; sélection de répertoire via un menu (double clic dans une Listview, thanks to Melba23)
Local $sFolder, $Frm_Main, $Lst_Handle, $Lst_Values
local $fDblClk, $SelIndex
Opt("GUIOnEventMode", 1)
Global $fDblClk = False
local $width, $L, $height
; dimensions approximatives du contenu de la listview, en pixels (utiliser _stringsize de melba23 pour un résultat pertinent)
$width = $nwidth_max * 8
$height = ($nheight_max * 8) + 100
$Frm_Main = GUICreate("Derniers répertoires mémorisés", $width, $height, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
$Lst_Values = GUICtrlCreateListView("Double clic pour explorer", 15, 15, $width-20, $height-20)
$Lst_Handle = GUICtrlGetHandle(-1)
; remplit la listview
For $i = 1 To UBound($aNewArray) - 1
_GUICtrlListView_AddItem($Lst_Handle, '"' & $aNewArray[$i] & '"')
Next
; ajuste la largeur de la colonne
_GUICtrlListView_SetColumnWidth($Lst_Handle, 0, $width-25)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_NOTIFY, "WM_ListView_DoubleClick")
While 1
Sleep(10)
If $fDblClk = True Then
$SelIndex = _GUICtrlListView_GetSelectedIndices($Lst_Values)
$sFolder = _GUICtrlListView_GetItemText($Lst_Handle, $SelIndex)
; lance windows explorer avec le chemin choisi
RunWait("explorer /e, " & $sFolder)
Exit
EndIf
WEnd
Func Close()
Exit
EndFunc ;==>Close
; React to double clicks on recent ListView
Func WM_ListView_DoubleClick($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $tNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
If DllStructGetData($tNMHDR, 1) = $Lst_Handle Then
If DllStructGetData($tNMHDR, 3) = $NM_DBLCLK Then $fDblClk = True
EndIf
$tNMHDR = 0
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_ListView_DoubleClick
► Afficher le texte