Options 1 :
- Affichage à l'écran
- Fichier Word
Options 2 :
- Tri par nom
- Tri par Emplacement
Dans le code, changez le répertoire par défaut pour la sauvegarde du fichier Word.
► Afficher le texte
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
Fonction du Script :
- Recherche la liste des programmes lancés au démarrage de Windows
- Affiche cette liste à l'écran ou crée et enregistre un document word
- Propose un tri
#ce ----------------------------------------------------------------------------
#include <array.au3>
#include <Word.au3>
#include <GuiListView.au3>
#Region définition des variables
Dim $ArrayHKLM[1][3]
Dim $ArrayHKCU[1][3]
Dim $ArrayDemCur[1][3]
Dim $ArrayDemCom[1][3]
$WS_POPUPWINDOW = 0x80880000
$WS_SIZEBOX = 0x00040000
$WS_EX_TOOLWINDOW = 0x00000080
;$WS_OVERLAPPEDWINDOW = 0x00CF0000
;$WS_CLIPSIBLINGS = 0x04000000
$GUI_EVENT_CLOSE = -3
Global Const $GUI_SHOW = 16
Global Const $GUI_HIDE = 32
$docdir="G:\0perso\Fichiers Docs\"
#EndRegion définition des variables
#Region définition de l'interface
guicreate("",400,190,-1,-1,$WS_POPUPWINDOW + $WS_SIZEBOX, $WS_EX_TOOLWINDOW)
guisetfont(10,400,-1,"Arial")
GUICtrlCreateLabel("Choississez la façon dont vous voulez consulter " & _
"la liste des programmes lancés au démarrage de Windows",10,10,380,40,0x01)
$btnOk=GUICtrlCreateButton("Valider",60,155,70,25)
$btnquitter=GUICtrlCreateButton("Quitter",250,155,70,25)
$mydoc= "Programmes lancés au démarrage de Windows " & @year & @MON & @MDAY & " " & @HOUR & @MIN & @SEC & ".doc"
$monlabelrep=GUICtrlCreateLabel("Chemin",5,105,36,20)
$monLabelnom=GUICtrlCreateLabel("Nom",5,130,36,20)
$moninputrep=GUICtrlCreateInput($docdir,45,105,345,20)
$moninputnom=GUICtrlCreateInput($mydoc,45,130,345,20)
guictrlsetfont($monlabelrep,8,400)
guictrlsetfont($monlabelnom,8,400)
guictrlsetfont($moninputrep,8,400)
guictrlsetfont($moninputnom,8,400)
guictrlsetstate($monlabelrep,$GUI_HIDE)
guictrlsetstate($monlabelnom,$GUI_HIDE)
guictrlsetstate($moninputrep,$GUI_HIDE)
guictrlsetstate($moninputnom,$GUI_HIDE)
GUIStartGroup()
$radioScreen=GUICtrlCreateradio("Affichage à l'écran",45,50,170,25)
$radioWord=GUICtrlCreateradio("Créer un document Word",45,75,170,25)
GUIStartGroup()
$radiotrinom=GUICtrlCreateradio("Tri par nom",260,50,80,25)
$radiotriclef=GUICtrlCreateradio("Tri par clef",260,75,80,25)
GUICtrlsetstate($radiotriclef,1)
GUICtrlsetstate($radioScreen,1)
guisetstate()
#EndRegion définition de l'interface
#Region traitement des événements
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE or $msg=$btnquitter Then Exit
if $msg=$btnOk Then
if guictrlread($radiotriclef)=1 Then
$sortbykey=1
else
$sortbykey=0
endif
if guictrlread($radioWord)=1 then
$choixvue="Word"
$docdir=guictrlread($moninputrep)
if stringright($docdir,1) <>"\" then $docdir=$docdir & "\"
if stringlen($docdir)=1 Then _
$docdir=@MyDocumentsDir & "\"
$mydoc= guictrlread($moninputnom)
if stringright($mydoc,4) <>".doc" then $mydoc = $mydoc & ".doc"
if stringlen($mydoc)=4 Then _
$mydoc= "Programmes lancés au démarrage de Windows" & @year & "-" & @MON & "-" & @MDAY & " " & @HOUR & @MIN & @SEC & ".doc"
If FileExists($docdir) Then
exitloop
Else
MsgBox(4096,"ERREUR" , "Le répertoire : " & chr(13) & chr(13) & _
chr(9) & $docdir & chr(13) & chr(13) & _
"n'existe pas ...")
EndIf
else
$choixvue="Ecran"
exitloop
endif
endif
if $msg=$radioWord Then
guictrlsetstate($monlabelrep,$GUI_SHOW)
guictrlsetstate($monlabelnom,$GUI_SHOW)
guictrlsetstate($moninputrep,$GUI_SHOW)
guictrlsetstate($moninputnom,$GUI_SHOW)
endif
if $msg=$radioScreen Then
guictrlsetstate($monlabelrep,$GUI_HIDE)
guictrlsetstate($monlabelnom,$GUI_HIDE)
guictrlsetstate($moninputrep,$GUI_HIDE)
guictrlsetstate($moninputnom,$GUI_HIDE)
EndIf
WEnd
guidelete()
#EndRegion traitement des événements
#Region Recueil des informations sur les différentes clef et répertoires
;~ traitement de la clef HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
$h = 0
Dim $ArrayHKLM[1][3]
$trouveHKLM=0
While 1
$var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",$h+1)
If @error then ExitLoop
$trouveHKLM=1
Redim $ArrayHKLM[$h+1][3]
$ArrayHKLM[$h][0] = $Var
$ArrayHKLM[$h][1] = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",$Var)
$ArrayHKLM[$h][2] = "HKEY_LOCAL_MACHINE\...\Run"
$h +=1
WEnd
_arraysort($ArrayHKLM)
; traitement de la clef HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
$i = 0
$trouveHKCU=0
Dim $ArrayHKCU[1][3]
While 1
$var = RegEnumVal("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",$i+1)
If @error then ExitLoop
$trouveHKCU=1
Redim $ArrayHKCU[$i+1][3]
$ArrayHKCU[$i][0] = $Var
$ArrayHKCU[$i][1] = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",$Var)
$ArrayHKCU[$i][2] = "HKEY_CURRENT_USER\...\Run"
$i +=1
WEnd
_arraysort($ArrayHKCU)
; traitement du répertoire @StartupCommonDir
$mypath=@StartupCommonDir & "\"
$trouveDemCom=0
$search = FileFindFirstFile($mypath & "*.lnk")
If $search <> -1 Then
Dim $ArrayDemCom[1][3]
$j=0
$trouveDemCom=1
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$details = FileGetShortcut($mypath & $file)
If @error Then
MsgBox(0, "ERREUR", "ERREUR dans les raccourcis : " & @error)
exit
endif
Redim $ArrayDemCom[$j+1][3]
$ArrayDemCom[$j][0] = stringreplace($file,".lnk","")
$ArrayDemCom[$j][1] = $details[0]
$ArrayDemCom[$j][2] = @StartupDir
$j+=1
WEnd
FileClose($search)
endif
_arraysort($ArrayDemCom)
; traitement du répertoire @StartupDir
$mypath=@StartupDir & "\"
$trouveDemCur=0
$search = FileFindFirstFile($mypath & "*.lnk")
If $search <> -1 Then
Dim $ArrayDemCur[1][3]
$trouveDemCur=1
$k=0
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$details = FileGetShortcut($mypath & $file)
If @error Then
MsgBox(0, "ERREUR", "ERREUR dans les raccourcis : " & @error)
exit
endif
Redim $ArrayDemCur[$k+1][3]
$ArrayDemCur[$k][0] = stringreplace($file,".lnk","")
$ArrayDemCur[$k][1] = $details[0]
$ArrayDemCur[$k][2] = @StartupDir
$k+=1
WEnd
FileClose($search)
endif
_arraysort($ArrayDemCur)
#EndRegion Recueil des informations sur les différentes clef et répertoires
#Region Elaboration de liste complète
;~ on crée un tableau regroupant toutes les données, le tri par clef est fait implicitement
$t=0
$madimension=0
dim $arraytout[1][3]
;~ on ajoute les valeurs de la clef HKLM
if $trouveHKLM=1 Then
$madimension+=$h
redim $arraytout[$madimension][3]
for $z=0 to $h-1
$arraytout[$t][0]=$ArrayHKLM[$z][0]
$arraytout[$t][1]=$ArrayHKLM[$z][1]
$arraytout[$t][2]=$ArrayHKLM[$z][2]
$t+=1
next
endif
;~ on ajoute les valeurs de la clef HKCU
if $trouveHKCU=1 Then
$madimension+=$i
redim $arraytout[$madimension][3]
for $z=0 to $i-1
$arraytout[$t][0]=$ArrayHKCU[$z][0]
$arraytout[$t][1]=$ArrayHKCU[$z][1]
$arraytout[$t][2]=$ArrayHKCU[$z][2]
$t+=1
next
endif
;~ on ajoute les valeurs du répertoire de démarrage Commun
if $trouveDemCom=1 Then
$madimension+=$j
redim $arraytout[$madimension][3]
for $z=0 to $j-1
$arraytout[$t][0]=$ArrayDemCom[$z][0]
$arraytout[$t][1]=$ArrayDemCom[$z][1]
$arraytout[$t][2]=$ArrayDemCom[$z][2]
$t+=1
next
endif
;~ on ajoute les valeurs du répertoire de démarrage de l'utilisateur Courant
if $trouveDemCur=1 Then
$madimension+=$k
redim $arraytout[$madimension][3]
for $z=0 to $k-1
$arraytout[$t][0]=$ArrayDemCur[$z][0]
$arraytout[$t][1]=$ArrayDemCur[$z][1]
$arraytout[$t][2]=$ArrayDemCur[$z][2]
$t+=1
next
endif
;~ Si demandé, on trie par nom
if $sortbykey=0 Then
_arraysort($arraytout)
endif
#EndRegion Elaboration de liste complète
#Region élaboration la liste pour l'affichage ou le texte pour word
$montextedebut= "Élément de démarrage" & @TAB & "Commande" & @TAB & "Emplacement"
$montexte=$montextedebut & @CRLF
dim $listarray[1]
redim $listarray[$t+1]
for $i=0 to $t-1
$listarray[$i+1]=$arraytout[$i][0] & @TAB & $arraytout[$i][1] & @TAB & $arraytout[$i][2]
$montexte=$montexte & $arraytout[$i][0] & @TAB & $arraytout[$i][1] & @TAB & $arraytout[$i][2] & @CRLF
next
$listarray[0]=$t
#EndRegion élaboration la liste pour l'affichage ou le texte pour word
#Region traitement avec Word
if $choixvue="Word" then
;~on lance une application Word
$oWordApp = _WordCreate ("",1,1,1)
$oDoc = _WordDocGetCollection ($oWordApp, 0)
sleep(1000)
;~ on y écrit le texte précédent
$oDoc.Range.Text= $montexte
;~ on active la fenêtre
opt("WinTitleMatchMode",2)
WinActivate("Microsoft Word")
sleep(250)
;~ on met en paysage et on coverti le texte en tableau
send("!fm!y{ENTER}^a!bit{HOME}!baa")
;~ élaboration du nom du fichier
$mydocname= $docdir & $mydoc
sleep(1000)
;~ on sauvegarde le fichier
_WordDocSaveas($oDoc,$mydocname)
endif
#EndRegion traitement avec Word
#Region traitement à l'écran
if $choixvue="Ecran" Then
$largeurcol0=1
$largeurcol1=1
$largeurcol2=1
for $i=0 to $t-1
if stringlen($arraytout[$i][0]) > $largeurcol0 then $largeurcol0=stringlen($arraytout[$i][0])
if stringlen($arraytout[$i][1]) > $largeurcol1 then $largeurcol1=stringlen($arraytout[$i][1])
if stringlen($arraytout[$i][2]) > $largeurcol2 then $largeurcol2=stringlen($arraytout[$i][2])
next
;~ on défini le séparateur de colonnes
opt("GUIDataSeparatorChar",@TAB)
;~ on défini l'interface
$coef=5
$largeur = $coef *($largeurcol0 + $largeurcol1 + $largeurcol2) + 20 ;660
if $largeur>@DesktopWidth then $largeur = @DesktopWidth-80
$hauteur=462
$largeurbouton=170
$hauteurbouton=20
GuiCreate("Liste des programmes lancés au démarrage de Windows", $largeur, $hauteur,-1, -1 , $WS_POPUPWINDOW + $WS_SIZEBOX, $WS_EX_TOOLWINDOW);BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
guictrlcreatelabel("Liste des programmes lancés au démarrage de Windows",5,5,$largeur-10,25,0x01)
guictrlsetfont(-1,10,400)
$btnOK=GUICtrlCreateButton("Ok",($largeur-$largeurbouton)/2,$hauteur-$hauteurbouton-5,$largeurbouton,$hauteurbouton)
Dim $liste_des_programmes = GUICtrlCreateListView($montextedebut, 10, 25, $largeur-20, $hauteur-$hauteurbouton-35, _
$LVS_SHOWSELALWAYS, $LVS_EX_GRIDLINES )
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, $largeurcol0*$coef)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, $largeurcol1*$coef)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, $largeurcol2*$coef)
;GUIctrlsetfont(-1,9,400,-1,"Courier New")
$Top_Item = _GUICtrlListView_GetTopIndex($liste_des_programmes)
For $w = 1 To $listarray[0]
GUICtrlCreateListViewItem($listarray[$w], $liste_des_programmes)
Next
_GUICtrlListView_EnsureVisible($liste_des_programmes, $Top_Item, True)
GuiSetState()
While 1
$msg = GuiGetMsg()
If $msg = $GUI_EVENT_CLOSE or $msg = $btnOK then exit
WEnd
Endif
#EndRegion traitement à l'écran