Je réalise un programme qui répertorie des logiciels sans licence, pour que les utilisateurs de ma boite puissent les installer simplement eux-mêmes.
Pour ce faire j'ai une listview avec des checkbox à l'intérieur.
Pour plus de facilité au niveau de la maintenance de cet outil, tous est dynamique (les noms et emplacements des exécutables sont renseigné dans des fichiers ini)
Voilà le code du programme :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
;~ #include <ListViewConstants.au3>
Opt('MustDeclareVars', 1)
Global $bt_condition, $check_non, $check_oui, $nMsg, $ini, $arr, $arr2, $cmd, $cmd_timeout, $gw, $radio_oui
Global $i, $i2, $ini, $bt_install, $listview, $output, $pid, $bt_quit, $timer, $var, $var2, $var_site, $var_site2, $Checks
If @OSVersion = "WIN_7" Then
$ini = @ScriptDir & '\param_7.ini'
ElseIf @OSVersion = "WIN_XP" Then
$ini = @ScriptDir & '\param_xp.ini'
ElseIf @OSVersion <> "WIN_7" Or "WIN_XP" Then
MsgBox(0, "Information","OS non supporté")
EndIf
Dim $gw
$gw = _get_default_gateway()
$var_site = IniReadSection(@ScriptDir & "\param_site.ini", "site")
If @error Then
MsgBox(4096, "", "Error occurred, probably no INI file.")
Else
For $i = 1 To $var_site[0][0]
If $gw = $var_site[$i][0] Then
$var_site2 = $var_site[$i][1]
EndIf
Next
EndIf
GUICreate("APLLI", 450, 450)
GUICtrlCreatePic("C:\images.jpg", 10, 10)
GUICtrlCreateLabel("APLLI", 180, 40)
GUICtrlCreateLabel("Outil de téléchargement de logiciels", 180, 60)
$listview = GUICtrlCreateListView("Liste des logiciels| Descriptions des programmes", 10, 165, 400, 150)
_GUICtrlListView_SetExtendedListViewStyle($listview, BitOR($LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES))
GUICtrlCreateLabel("J'accepte les conditions d'utilisation de ce module", 10, 325)
$check_oui = GUICtrlCreateCheckbox ("J'accepte", 10, 340)
$bt_condition = GUICtrlCreateButton ("Condition général", 290, 320, 110)
$bt_quit = GUICtrlCreateButton("Quitter", 290, 370, 100)
$bt_install = GUICtrlCreateButton("Installer", 185, 370, 100)
$var = IniReadSection($ini, "progs")
$var2 = IniReadSection($ini, "description")
For $i = 1 To $var[0][0]
For $i = 1 To $var2[0][0]
GUICtrlCreateListViewItem($var[$i][0] & "|" & $var2[$i][0], $listview)
Next
Next
Dim $Checks[$var[0][0] + 1]
;~ -----------------------------------------------------------------------------------------------------------------
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $nMsg = $check_oui
Case $nMsg = $bt_install
If _IsunChecked($check_oui) Then
MsgBox(8192, "Information", "Il faut accepter les conditions générales avant de lancer l'installation des applications")
EndIf
If _IsChecked($check_oui) Then
For $x = 1 To $var[0][0]
If _IsChecked($Checks[$x]) Then
MsgBox(0, "verif3", $var_site2 & $var[$x][1])
;~ ShellExecuteWait($var_site2 & $var[$x][1])
If @error Then
MsgBox(8192, "", "Erreur, Installation non complète.")
EndIf
EndIf
Next
EndIf
case $nMsg = $bt_condition
ShellExecute ("C:\Condition général.docx")
Case $GUI_EVENT_CLOSE
Exit
Case $bt_quit
ExitLoop
EndSwitch
WEnd
;~ -----------------------------------------------------------------------------------------------------------------
;~ Fonction pour la gateway
;~ -----------------------------------------------------------------------------------------------------------------
Func _get_default_gateway()
$output = _get_cmd_output("netstat -rn")
$arr = StringSplit($output, "0.0.0.0", 1)
$arr2 = StringStripWS($arr[3], 1)
$arr2 = StringSplit($arr2, " ")
Return $arr2[1]
EndFunc
Func _get_cmd_output($cmd)
$cmd_timeout = 2000
$pid = Run($cmd,@WorkingDir,@SW_HIDE,2)
$timer = TimerInit()
while (ProcessExists($pid))
sleep(50)
If TimerDiff($timer) > $cmd_timeout Then ProcessClose($pid)
WEnd
$output = StdoutRead($pid)
Return StringStripCR($output)
EndFunc
;~ -----------------------------------------------------------------------------------------------------------------
;~ Fonction checkbox
;~ -----------------------------------------------------------------------------------------------------------------
Func _IsChecked($control)
Return BitAnd(GUICtrlRead($control),$GUI_CHECKED) = $GUI_CHECKED
EndFunc
Func _IsunChecked($control)
Return BitAnd(GUICtrlRead($control),$GUI_UNCHECKED) = $GUI_UNCHECKED
EndFuncFichier param_xp.ini
► Afficher le texte
[progs]
Prog01=calc.exe
Prog02=sol.exe
Prog03=spider.exe
Prog04=Retrait.exe
Prog05=toto
Prog06=tata
Vlc=VLC_MEDIA_PLAYER_0.9.9_FR\Auto-Install_Vlc_0.9.9.cmd
Pdf_creator=ADOBE_PDF_CREATOR_1.1.0_FR\Auto-Install_PDFCREATOR_110.cmd
[description]
Description du programme 01=0
Description du programme 02=0
Description du programme 03=0
Description du programme 04=0
Description du programme 05=0
Description du programme 06xxxxxxxxxxxxxxxxxxxx=0
Lecteur de vidéos et musics=0
Editeur de fichier pdf=0
Prog01=calc.exe
Prog02=sol.exe
Prog03=spider.exe
Prog04=Retrait.exe
Prog05=toto
Prog06=tata
Vlc=VLC_MEDIA_PLAYER_0.9.9_FR\Auto-Install_Vlc_0.9.9.cmd
Pdf_creator=ADOBE_PDF_CREATOR_1.1.0_FR\Auto-Install_PDFCREATOR_110.cmd
[description]
Description du programme 01=0
Description du programme 02=0
Description du programme 03=0
Description du programme 04=0
Description du programme 05=0
Description du programme 06xxxxxxxxxxxxxxxxxxxx=0
Lecteur de vidéos et musics=0
Editeur de fichier pdf=0
Identique pour le moment
Fichier param_site.ini
► Afficher le texte
[site]
"passerelle site 1"=chemin sur le serveur
"passerelle site 2"=chemin sur le serveur
Exemple : 192.168.0.1=\\monpc\rep_dinstall\
"passerelle site 1"=chemin sur le serveur
"passerelle site 2"=chemin sur le serveur
Exemple : 192.168.0.1=\\monpc\rep_dinstall\
J'arrive à récupérer tous les chemins complets, mais pas uniquement ceux que j'ai cochées…
Mon problème est à la ligne :
If _IsChecked($Checks[$x]) Then
La variable $Checks ne correspond à rien dans ce script mais à une ancienne version .
Ancienne version :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3>
If @OSVersion = "WIN_7" Then
$ini = @ScriptDir & '\param_7.ini'
ElseIf @OSVersion = "WIN_XP" Then
$ini = @ScriptDir & '\param_xp.ini'
ElseIf @OSVersion <> "WIN_7" Or "WIN_XP" Then
MsgBox(0, "Information","OS non supporté")
EndIf
Dim $gw
$gw = _get_default_gateway()
$var = IniReadSection(@ScriptDir & "\param_site.ini", "site")
If @error Then
MsgBox(4096, "", "Error occurred, probably no INI file.")
Else
For $i = 1 To $var[0][0]
If $gw = $var[$i][0] Then
$var2 = $var[$i][1]
EndIf
Next
EndIf
$var = IniReadSection($ini, "progs")
If @error Then
MsgBox(4096, "", "Erreur, Fichier ini non trouvé.")
Else
For $i = 1 To $var[0][0]
Next
EndIf
Dim $Checks[$var[0][0] + 1]
$Height = ($var[0][0] * 20) + 50
If $Height > @DesktopHeight Then
MsgBox(0x0,"Erreur", "Il y a trop de logiceil à afficher pour votre ecran", 3)
$Height = @DesktopHeight - 50
EndIf
GUICreate("Logiciels disponnibles : " & $var[0][0], 300, $Height)
For $i = 1 To $var[0][0]
$Height = $i * 20
$Checks[$i] = GUICtrlCreateCheckbox($var[$i][0], 5, $Height, 150, 15)
Next
$btn = GUICtrlCreateButton("Start", 200, 30, 60, 30)
GUISetState()
While 1
$Msg = GUIGetMsg()
Select
Case $Msg = $GUI_EVENT_CLOSE
Exit
Case $Msg = $btn
For $x = 1 To $var[0][0]
If _IsChecked($Checks[$x]) Then
MsgBox(0, "verif", $var2 & $var[$x][1])
;~ ShellExecuteWait($var2 & $var[$x][1])
If @error Then
MsgBox(4096, "", "Erreur, Installation non complète.")
EndIf
;~ ProcessGetStats
Sleep(1000)
EndIf
Next
EndSelect
WEnd
Func _get_default_gateway()
$output = _get_cmd_output("netstat -rn")
$arr = StringSplit($output, "0.0.0.0", 1)
$arr2 = StringStripWS($arr[3], 1)
$arr2 = StringSplit($arr2, " ")
Return $arr2[1]
EndFunc
Func _get_cmd_output($cmd)
$cmd_timeout = 2000
$pid = Run($cmd,@WorkingDir,@SW_HIDE,2)
$timer = TimerInit()
while (ProcessExists($pid))
sleep(50)
If TimerDiff($timer) > $cmd_timeout Then ProcessClose($pid)
WEnd
$output = StdoutRead($pid)
Return StringStripCR($output)
EndFunc
Func _IsChecked($control)
Return BitAnd(GUICtrlRead($control),$GUI_CHECKED) = $GUI_CHECKED
EndFunc
Func _IsunChecked($control)
Return BitAnd(GUICtrlRead($control),$GUI_UNCHECKED) = $GUI_UNCHECKED
EndFuncJ'espère avoir été assez claire dans mon explication.
Merci de votre aide






