Petit code, généré par IA... Je test pas mal de choses sur les IA depuis quelques jours, je n'est rien touché au code qu'elle à générer...
Tester sur un PC W10, c'est fonctionnel (surement pas parfait !) Je regarde demain sur W11.
Il y'a quelques erreurs, je verrais demain si il arrive à les corriger tout seul...
Pour résumé, il regarde si il y'a des mises à jours logiciels via Winget, les affiches, et propose de les installer (tous ou par selection)
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <ListViewConstants.au3>
#include <GuiListView.au3>
#include <FileConstants.au3>
#include <Process.au3>
#include <StringConstants.au3>
#include <ProgressConstants.au3>
; Fonction pour vérifier si Winget est installé
Func IsWingetInstalled()
Local $sOutput = ""
Local $iExitCode = 0
$iExitCode = RunWait(@ComSpec & " /c winget --version", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$sOutput = StdoutRead($iExitCode)
If $iExitCode = 0 Then
Return True
Else
MsgBox($MB_ICONINFORMATION, "Débug Info", "Code de sortie: " & $iExitCode & @CRLF & "Sortie: " & $sOutput)
Return False
EndIf
EndFunc
If Not IsWingetInstalled() Then
MsgBox($MB_ICONERROR, "Erreur", "Winget n'a pas été détecté sur ce système. Veuillez vous assurer qu'il est installé et accessible via la ligne de commande.")
Exit
EndIf
; Crée l'interface graphique
$hGUI = GUICreate("Gestionnaire de mises à jour Winget", 600, 450)
$idListView = GUICtrlCreateListView("Application|Version actuelle|Version disponible", 10, 10, 580, 300, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS))
_GUICtrlListView_SetExtendedListViewStyle($idListView, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
$idRefresh = GUICtrlCreateButton("Rafraîchir", 10, 320, 100, 30)
$idUpdate = GUICtrlCreateButton("Mettre à jour sélection", 120, 320, 150, 30)
$idUpdateAll = GUICtrlCreateButton("Tout mettre à jour", 280, 320, 150, 30)
$idProgress = GUICtrlCreateProgress(10, 360, 580, 20)
GUICtrlSetState($idProgress, $GUI_HIDE)
$idProgressText = GUICtrlCreateLabel("", 10, 390, 580, 20)
GUICtrlSetState($idProgressText, $GUI_HIDE)
GUISetState(@SW_SHOW)
; Fonction pour obtenir les mises à jour disponibles
Func GetAvailableUpdates()
Local $sOutput = ""
Local $aUpdates[0][3]
Local $iPID = Run(@ComSpec & " /c winget upgrade", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
While 1
$sOutput &= StdoutRead($iPID)
If @error Then ExitLoop
WEnd
ProcessClose($iPID)
; Diviser la sortie en lignes
$aLines = StringSplit($sOutput, @CRLF, $STR_NOCOUNT)
; Trouver l'index de la ligne d'en-tête
Local $iHeaderIndex = -1
For $i = 0 To UBound($aLines) - 1
If StringInStr($aLines[$i], "Nom") And StringInStr($aLines[$i], "ID") And StringInStr($aLines[$i], "Version") Then
$iHeaderIndex = $i
ExitLoop
EndIf
Next
; Si l'en-tête est trouvé, commencer à traiter les lignes suivantes
If $iHeaderIndex <> -1 Then
For $i = $iHeaderIndex + 1 To UBound($aLines) - 2 ; Exclure la dernière ligne
; Ignorer les lignes vides ou les séparateurs
If $aLines[$i] = "" Or StringRegExp($aLines[$i], "^[-\s]+$") Then
ContinueLoop
EndIf
; Extraire les informations pertinentes
Local $aMatch = StringRegExp($aLines[$i], "^(.*?)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$", $STR_REGEXPARRAYMATCH)
If @error Then ContinueLoop ; Si le motif ne correspond pas, passer à la ligne suivante
; Ajouter l'application à la liste des mises à jour
_ArrayAdd($aUpdates, StringStripWS($aMatch[0], 3) & "|" & StringStripWS($aMatch[4], 3) & "|" & StringStripWS($aMatch[1], 3))
Next
EndIf
Return $aUpdates
EndFunc
; Fonction pour mettre à jour l'interface utilisateur avec les mises à jour disponibles
Func RefreshUpdateList()
_GUICtrlListView_DeleteAllItems($idListView)
Local $aUpdates = GetAvailableUpdates()
For $i = 0 To UBound($aUpdates) - 1
GUICtrlCreateListViewItem($aUpdates[$i][0] & "|" & $aUpdates[$i][1] & "|" & $aUpdates[$i][2], $idListView)
Next
EndFunc
; Fonction pour mettre à jour les applications sélectionnées
Func UpdateSelected()
Local $iCount = _GUICtrlListView_GetItemCount($idListView)
Local $iSelected = 0
Local $aSelectedApps[0]
; Compter les applications sélectionnées
For $i = 0 To $iCount - 1
If _GUICtrlListView_GetItemChecked($idListView, $i) Then
$iSelected += 1
_ArrayAdd($aSelectedApps, $i)
EndIf
Next
If $iSelected = 0 Then
MsgBox($MB_ICONINFORMATION, "Information", "Aucune application sélectionnée.")
Return
EndIf
; Afficher la barre de progression
GUICtrlSetState($idProgress, $GUI_SHOW)
GUICtrlSetState($idProgressText, $GUI_SHOW)
; Mettre à jour les applications sélectionnées
For $i = 0 To UBound($aSelectedApps) - 1
Local $iIndex = $aSelectedApps[$i]
Local $sAppName = _GUICtrlListView_GetItemText($idListView, $iIndex, 0)
; Mettre à jour le texte de progression
GUICtrlSetData($idProgressText, "Mise à jour de " & $sAppName & "...")
; Mettre à jour la barre de progression
GUICtrlSetData($idProgress, ($i + 1) / $iSelected * 100)
; Exécuter la mise à jour
Local $cmd = @ComSpec & " /c winget upgrade """ & $sAppName & """"
RunWait($cmd, "", @SW_HIDE)
; Décocher l'application mise à jour
_GUICtrlListView_SetItemChecked($idListView, $iIndex, False)
Next
; Cacher la barre de progression
GUICtrlSetState($idProgress, $GUI_HIDE)
GUICtrlSetState($idProgressText, $GUI_HIDE)
MsgBox($MB_ICONINFORMATION, "Mise à jour terminée", "Les applications sélectionnées ont été mises à jour.")
RefreshUpdateList()
EndFunc
; Fonction pour tout mettre à jour
Func UpdateAll()
Local $iCount = _GUICtrlListView_GetItemCount($idListView)
; Cocher toutes les cases
For $i = 0 To $iCount - 1
_GUICtrlListView_SetItemChecked($idListView, $i, True)
Next
; Lancer la mise à jour de la sélection
UpdateSelected()
EndFunc
; Boucle principale
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $idRefresh
RefreshUpdateList()
Case $idUpdate
UpdateSelected()
Case $idUpdateAll
UpdateAll()
EndSwitch
WEnd
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <ListViewConstants.au3>
#include <GuiListView.au3>
#include <FileConstants.au3>
#include <Process.au3>
#include <StringConstants.au3>
#include <ProgressConstants.au3>
; Fonction pour vérifier si Winget est installé
Func IsWingetInstalled()
Local $sOutput = ""
Local $iExitCode = 0
$iExitCode = RunWait(@ComSpec & " /c winget --version", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$sOutput = StdoutRead($iExitCode)
If $iExitCode = 0 Then
Return True
Else
MsgBox($MB_ICONINFORMATION, "Débug Info", "Code de sortie: " & $iExitCode & @CRLF & "Sortie: " & $sOutput)
Return False
EndIf
EndFunc
If Not IsWingetInstalled() Then
MsgBox($MB_ICONERROR, "Erreur", "Winget n'a pas été détecté sur ce système. Veuillez vous assurer qu'il est installé et accessible via la ligne de commande.")
Exit
EndIf
; Crée l'interface graphique
$hGUI = GUICreate("Gestionnaire de mises à jour Winget", 600, 450)
$idListView = GUICtrlCreateListView("Application|Version actuelle|Version disponible", 10, 10, 580, 300, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS))
_GUICtrlListView_SetExtendedListViewStyle($idListView, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
$idRefresh = GUICtrlCreateButton("Rafraîchir", 10, 320, 100, 30)
$idUpdate = GUICtrlCreateButton("Mettre à jour sélection", 120, 320, 150, 30)
$idUpdateAll = GUICtrlCreateButton("Tout mettre à jour", 280, 320, 150, 30)
$idProgress = GUICtrlCreateProgress(10, 360, 580, 20)
GUICtrlSetState($idProgress, $GUI_HIDE)
$idProgressText = GUICtrlCreateLabel("", 10, 390, 580, 20)
GUICtrlSetState($idProgressText, $GUI_HIDE)
GUISetState(@SW_SHOW)
; Fonction pour obtenir les mises à jour disponibles
Func GetAvailableUpdates()
Local $sOutput = ""
Local $aUpdates[0][3]
Local $iPID = Run(@ComSpec & " /c winget upgrade", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
While 1
$sOutput &= StdoutRead($iPID)
If @error Then ExitLoop
WEnd
ProcessClose($iPID)
; Diviser la sortie en lignes
$aLines = StringSplit($sOutput, @CRLF, $STR_NOCOUNT)
; Trouver l'index de la ligne d'en-tête
Local $iHeaderIndex = -1
For $i = 0 To UBound($aLines) - 1
If StringInStr($aLines[$i], "Nom") And StringInStr($aLines[$i], "ID") And StringInStr($aLines[$i], "Version") Then
$iHeaderIndex = $i
ExitLoop
EndIf
Next
; Si l'en-tête est trouvé, commencer à traiter les lignes suivantes
If $iHeaderIndex <> -1 Then
For $i = $iHeaderIndex + 1 To UBound($aLines) - 2 ; Exclure la dernière ligne
; Ignorer les lignes vides ou les séparateurs
If $aLines[$i] = "" Or StringRegExp($aLines[$i], "^[-\s]+$") Then
ContinueLoop
EndIf
; Extraire les informations pertinentes
Local $aMatch = StringRegExp($aLines[$i], "^(.*?)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$", $STR_REGEXPARRAYMATCH)
If @error Then ContinueLoop ; Si le motif ne correspond pas, passer à la ligne suivante
; Ajouter l'application à la liste des mises à jour
_ArrayAdd($aUpdates, StringStripWS($aMatch[0], 3) & "|" & StringStripWS($aMatch[4], 3) & "|" & StringStripWS($aMatch[1], 3))
Next
EndIf
Return $aUpdates
EndFunc
; Fonction pour mettre à jour l'interface utilisateur avec les mises à jour disponibles
Func RefreshUpdateList()
_GUICtrlListView_DeleteAllItems($idListView)
Local $aUpdates = GetAvailableUpdates()
For $i = 0 To UBound($aUpdates) - 1
GUICtrlCreateListViewItem($aUpdates[$i][0] & "|" & $aUpdates[$i][1] & "|" & $aUpdates[$i][2], $idListView)
Next
EndFunc
; Fonction pour mettre à jour les applications sélectionnées
Func UpdateSelected()
Local $iCount = _GUICtrlListView_GetItemCount($idListView)
Local $iSelected = 0
Local $aSelectedApps[0]
; Compter les applications sélectionnées
For $i = 0 To $iCount - 1
If _GUICtrlListView_GetItemChecked($idListView, $i) Then
$iSelected += 1
_ArrayAdd($aSelectedApps, $i)
EndIf
Next
If $iSelected = 0 Then
MsgBox($MB_ICONINFORMATION, "Information", "Aucune application sélectionnée.")
Return
EndIf
; Afficher la barre de progression
GUICtrlSetState($idProgress, $GUI_SHOW)
GUICtrlSetState($idProgressText, $GUI_SHOW)
; Mettre à jour les applications sélectionnées
For $i = 0 To UBound($aSelectedApps) - 1
Local $iIndex = $aSelectedApps[$i]
Local $sAppName = _GUICtrlListView_GetItemText($idListView, $iIndex, 0)
; Mettre à jour le texte de progression
GUICtrlSetData($idProgressText, "Mise à jour de " & $sAppName & "...")
; Mettre à jour la barre de progression
GUICtrlSetData($idProgress, ($i + 1) / $iSelected * 100)
; Exécuter la mise à jour
Local $cmd = @ComSpec & " /c winget upgrade """ & $sAppName & """"
RunWait($cmd, "", @SW_HIDE)
; Décocher l'application mise à jour
_GUICtrlListView_SetItemChecked($idListView, $iIndex, False)
Next
; Cacher la barre de progression
GUICtrlSetState($idProgress, $GUI_HIDE)
GUICtrlSetState($idProgressText, $GUI_HIDE)
MsgBox($MB_ICONINFORMATION, "Mise à jour terminée", "Les applications sélectionnées ont été mises à jour.")
RefreshUpdateList()
EndFunc
; Fonction pour tout mettre à jour
Func UpdateAll()
Local $iCount = _GUICtrlListView_GetItemCount($idListView)
; Cocher toutes les cases
For $i = 0 To $iCount - 1
_GUICtrlListView_SetItemChecked($idListView, $i, True)
Next
; Lancer la mise à jour de la sélection
UpdateSelected()
EndFunc
; Boucle principale
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $idRefresh
RefreshUpdateList()
Case $idUpdate
UpdateSelected()
Case $idUpdateAll
UpdateAll()
EndSwitch
WEnd