Page 1 sur 1

[R] Fonction qui liste les programmes à désinstaller

Posté : jeu. 05 juin 2014 21:52
par Loustak
Bonjour,
J'essai d'écrire une fonction qui liste les programme pouvant être désinstaller sur l'ordinateur, sauf qu'elle marche à moitié, seul les programmes lu l'ors de la 2e clef de registre sont correctement ajouté à la combobox, pourquoi ?

Code : Tout sélectionner

Func _uninstallProgram()
        global $count = 0
        _uninstallProgramList("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
        _uninstallProgramList("CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
        _ArrayDisplay($arrayUninstall)
EndFunc

Func _uninstallProgramList($RegKey)
    Local $key, $name, $cmd, $scmd
While 1
    $count += 1
    $key = RegEnumKey($RegKey, $count)
    If @error Then
        ExitLoop
    EndIf
    $name = RegRead($RegKey & "\" & $key, "DisplayName")
    $cmd = RegRead($RegKey & "\" & $key, "UninstallString")
    $scmd = RegRead($RegKey & "\" & $key, "DisplayIcon")
    $arrayUninstall[$count][0] = $name
    $arrayUninstall[$count][1] = $cmd
    $arrayUninstall[$count][2] = $scmd
    GUICtrlSetData($CMB_program, $name)
Wend
EndFunc
Le but de ma fonction étant que la combobox soit vidé ainsi que le tableau si je la rappelle plus tard.
Merci de votre aide :)

Re: [..] Fonction qui liste les programmes à désinstaller

Posté : ven. 06 juin 2014 11:09
par jguinch
Si $name est vide, GUIGetSetData va vider la ComboBox.

Petites remarques :
- il faudra prévoir d'aller lire dans HKEY_LOCAL_MACHINE64 pour les programmes installés en 64 bits
- une ComboBox ne peut pas contenir de noms en double (si tu as par exemple Java en 32 et en 64 bits)
- il faut éviter de déclarer des variables en Global à l'intérieur des fonctions (plutôt en début de script)

Re: [..] Fonction qui liste les programmes à désinstaller

Posté : ven. 06 juin 2014 22:39
par Loustak
Merci de votre réponse, ça ma permis de régler déjà un gros problème :wink:
Sauf que maintenant c'est la 2e clef de registre qui n'est pas lu, dans le registre j'ai :
Codeblock, utorrent & chrome alors que dans le tableau rien ?

Code : Tout sélectionner

Func _uninstallProgram()
        _uninstallProgramList("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
        _uninstallProgramList("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall")
        _ArrayDisplay($arrayUninstall)
EndFunc

Func _uninstallProgramList($RegKey)
    Local $key, $name, $cmd, $scmd
While 1
    $count += 1
    $key = RegEnumKey($RegKey, $count)
    If @error Then
        ExitLoop
    EndIf
    $name = RegRead($RegKey & "\" & $key, "DisplayName")
    $cmd = RegRead($RegKey & "\" & $key, "UninstallString")
    $scmd = RegRead($RegKey & "\" & $key, "DisplayIcon")
    if $name <> "" Then
        $arrayUninstall[$count][0] = $name
        $arrayUninstall[$count][1] = $cmd
        $arrayUninstall[$count][2] = $scmd
    GUICtrlSetData($CMB_program, $name)
    Else
    GUICtrlSetData($CMB_program, $TXT_programList)
    EndIf
Wend
EndFunc
 

Re: [..] Fonction qui liste les programmes à désinstaller

Posté : ven. 06 juin 2014 23:02
par jguinch
Et avec ça, ça donne quoi ?
► Afficher le texte

Re: [..] Fonction qui liste les programmes à désinstaller

Posté : sam. 21 juin 2014 23:07
par Loustak
ça fonctionne tout s'affiche ensuite, je suppose que pour vider la cmbobox he fait GuiCtrlSetData() et pour le tableau $montableau[]="" ?

Re: [R] Fonction qui liste les programmes à désinstaller

Posté : dim. 22 juin 2014 16:02
par jguinch
Oui c'est à peu près ça.
Vider le tableau, c'est pas forcément utile dans ce cas...