Page 1 sur 2

Administateur - Gestion des services Windows

Posté : jeu. 10 oct. 2019 23:26
par dexter74
Bonjour,
je souhaiterai un petit coups de main pour réaliser un gestionnaire de service.

L'idée:

Code : Tout sélectionner

- Un label par nom de service
- 4 Checkbox pour les différents état (Démarrage, arrêt, désactiver le service et activer le service
- Une fenêtre en dessous qui affiche l'état.
- 1 Bouton Appliquer les paramètres
- 1 Bouton qui permet de rafraîchir l'état
Fonctionnement :

Code : Tout sélectionner

JE souhaite que selon les cases coché pour chaque services sa applique le paramètre via une commande CMD.
Commandes DOS

Code : Tout sélectionner

RunWait(@ComSpec & " /c NET STOP " & "MONSERVICE" & " /Y",@SystemDir,@SW_HIDE)
RunWait(@ComSpec & " /c NET START" & "MONSERVICE" & " /Y",@SystemDir,@SW_HIDE)

Commande incorrect:
RunWait(@ComSpec & " /c sc config" & "SysMain" & "start= disabled" & " /Y",@SystemDir,@SW_HIDE)

Le code générer avec KODA GUI:

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>

; https://www.autoitscript.com/forum/topic/10430-basic-gui-with-2-buttons/
; https://www.autoitscript.fr/forum/viewtopic.php?t=9806
; https://www.autoitscript.com/forum/topic/139137-how-to-simulate-mouse-click-without-moving-the-cursor/?do=findComment&comment=975559
; https://www.autoitscript.com/autoit3/docs/functions/ProcessExists.htm
; GUICtrlRead


$Form1_1 = GUICreate("Gestions des services Windows - par Drthrax", 457, 247, 1785, 262)

$Label_Superfetch 		= GUICtrlCreateLabel("Superfetch", 48, 16, 56, 17)
$Checkbox1_Superfetch 	= GUICtrlCreateCheckbox("A", 40, 48, 65, 17)
$Checkbox2_Superfetch 	= GUICtrlCreateCheckbox("B", 40, 72, 65, 17)
$Checkbox3_Superfetch 	= GUICtrlCreateCheckbox("C", 40, 96, 97, 17)
$Checkbox4_Superfetch	= GUICtrlCreateCheckbox("D", 40, 120, 121, 17)

$Checkbox5 				= GUICtrlCreateCheckbox("E", 192, 96, 97, 17)
$Checkbox6 				= GUICtrlCreateCheckbox("F", 192, 120, 121, 17)
$Checkbox7 				= GUICtrlCreateCheckbox("G", 192, 48, 65, 17)
$Checkbox8 				= GUICtrlCreateCheckbox("H", 192, 72, 65, 17)


$Button_Appliquer		= GUICtrlCreateButton("Appliquer", 224, 192, 201, 33)
$Button_Check			= GUICtrlCreateButton("Vérifier etat du service", 32, 192, 177, 33)

$Label_WinUpdates		= GUICtrlCreateLabel("Windows Updates", 200, 16, 91, 17)




$Group1 = GUICtrlCreateGroup("ETAT DU SERVICE", 32, 144, 145, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)

$Group2 = GUICtrlCreateGroup("ETAT DU SERVICE", 192, 144, 145, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)



GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
w
	Case $Button_Appliquer
		 if sysmain_1() = true Then

		 EndIf

	  Case $GUI_EVENT_CLOSE
		 Exit

	EndSwitch
WEnd





Func sysmain_1()
   if GUICtrlRead($Checkbox1_Superfetch) = 1 AND GUICtrlRead($Checkbox2_Superfetch) = 1 OR GUICtrlRead($Checkbox3_Superfetch) = 1 AND GUICtrlRead($Checkbox4_Superfetch) = 1 Then
	  MsgBox($MB_SYSTEMMODAL, "", "TESTE")
	Else
	EndIf
EndFunc




Func Service_sysmain()
   if ProcessExists("C:\WINDOWS\system32\svchost.exe -k LocalSystemNetworkRestricted -p") then
	     RunWait(@ComSpec & " /c NET STOP " & "SysMain" & " /Y",@SystemDir,@SW_HIDE)
		 Sleep(1000)
		 RunWait(@ComSpec & " /c sc config" & "SysMain" & "start= disabled" & " /Y",@SystemDir,@SW_HIDE)
		 MsgBox($MB_SYSTEMMODAL, "", "Sysmain arrêter")
			 Else
			 EndIf

   EndFunc

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 11:23
par DimVar
Bonjour,

Quel est le soucis ?

Cdlt, Dimvar.

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 11:44
par dexter74
Bonjour,

Pour le bouton qui appel les fonctions, je sais pas comment faire .


https://www.autoitscript.com/autoit3/do ... eEndIf.htm

Code : Tout sélectionner



Func sysmain()

   ; Vérifier Si les 4 cases sont coché: Code erreur
   if GUICtrlRead($Checkbox1_Superfetch) = 1 AND GUICtrlRead($Checkbox2_Superfetch) = 1 And GUICtrlRead($Checkbox3_Superfetch) = 1 AND GUICtrlRead($Checkbox4_Superfetch) = 1 then
	   MsgBox($MB_SYSTEMMODAL, "Code Erreur", "Veuillez ne pas sélectionner d'action contradictoire")

   ; Vérifier Si les cases 1 et 2 sont coché: Code erreur
   ElseIf GUICtrlRead($Checkbox1_Superfetch) = 1 AND GUICtrlRead($Checkbox2_Superfetch) = 1 Then
	  MsgBox($MB_SYSTEMMODAL, "Code Erreur", "Erreur: Case Démarrer et arrêter en même temps")

   ; Vérifier Si les cases 3 et 4 sont coché: Code erreur
   ElseIf GUICtrlRead($Checkbox3_Superfetch) = 1 AND GUICtrlRead($Checkbox4_Superfetch) = 1 Then
	  MsgBox($MB_SYSTEMMODAL, "Code Erreur", "Erreur Case Désactiver et Activer en même temps")

   ElseIf GUICtrlRead($Checkbox1_Superfetch) = 1 Then ;
	  RunWait(@ComSpec & " /c NET START " & "SysMain" & " /Y",@SystemDir,@SW_HIDE)

   ElseIf GUICtrlRead($Checkbox2_Superfetch) = 1 Then ;
	  RunWait(@ComSpec & " /c NET STOP " & "SysMain" & " /Y",@SystemDir,@SW_HIDE)

   ElseIf GUICtrlRead($Checkbox3_Superfetch) = 1 Then ;
	  RunWait(@ComSpec & " /c " & "sc config SysMain start= auto")

   ElseIf GUICtrlRead($Checkbox4_Superfetch) = 1 Then ;
	  RunWait(@ComSpec & " /c " & "sc config SysMain start= disabled")


   Else
	  MsgBox($MB_SYSTEMMODAL, "Code Erreur", "Aucune case coché")

	EndIf

 EndFunc




 Func WinUpdates()

   ; Vérifier Si les 4 cases sont coché: Code erreur
   if GUICtrlRead($Checkbox1_WinUpdates) = 1 AND GUICtrlRead($Checkbox2_WinUpdates) = 1 And GUICtrlRead($Checkbox3_WinUpdates) = 1 AND GUICtrlRead($Checkbox4_WinUpdates) = 1 then
	   MsgBox($MB_SYSTEMMODAL, "Code Erreur", "Veuillez ne pas sélectionner d'action contradictoire")

   ; Vérifier Si les cases 1 et 2 sont coché: Code erreur
   ElseIf GUICtrlRead($Checkbox1_WinUpdates) = 1 AND GUICtrlRead($Checkbox2_WinUpdates) = 1 Then
	  MsgBox($MB_SYSTEMMODAL, "Code Erreur", "Erreur: Case Démarrer et arrêter en même temps")

   ; Vérifier Si les cases 3 et 4 sont coché: Code erreur
   ElseIf GUICtrlRead($Checkbox3_WinUpdates) = 1 AND GUICtrlRead($Checkbox4_WinUpdates) = 1 Then
	  MsgBox($MB_SYSTEMMODAL, "Code Erreur", "Erreur Case Désactiver et Activer en même temps")

   ElseIf GUICtrlRead($Checkbox1_WinUpdates) = 1 Then ;
	  RunWait(@ComSpec & " /c NET START " & "wuauserv" & " /Y",@SystemDir,@SW_HIDE)

   ElseIf GUICtrlRead($Checkbox2_WinUpdates) = 1 Then ;
	  RunWait(@ComSpec & " /c NET STOP " & "wuauserv" & " /Y",@SystemDir,@SW_HIDE)

   ElseIf GUICtrlRead($Checkbox3_WinUpdates) = 1 Then ;
	  RunWait(@ComSpec & " /c " & "sc config wuauserv start= auto")

   ElseIf GUICtrlRead($Checkbox4_WinUpdates = 1 Then ;
	  RunWait(@ComSpec & " /c " & "sc config wuauserv start= disabled")


   Else
	  MsgBox($MB_SYSTEMMODAL, "Code Erreur", "Aucune case coché")

	EndIf

 EndFunc

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 13:32
par DimVar
J'opterai pour dans un premier temps :
- Vérifier les incohérences des radios cochées. Si les radios sont mal cochées => msg erreur
- Vérifier le résultat de la première verif, si résultat ok, on exécute les commandes pour les radios cochées.

Donc tes deux fonctions peuvent exister, mais il faut que tu prévois un code retour fonction sur la première, que la 2e prendra en compte pour s’exécuter ou pas.

Cdlt, Dimvar.

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 14:36
par DimVar
Peut etre aurais tu pu passer par des combos plutôt que des checkbox, cela t’éviterait de contrôler les incohérences.
EX :
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
   ; Create a GUI with various controls.
   Local $hGUI = GUICreate("Example", 300, 200)

   ; Create a combobox control.
   Local $idComboBox = GUICtrlCreateCombo("Activé", 10, 10, 185, 20)
   Local $idButton_Close = GUICtrlCreateButton("Close", 210, 170, 85, 25)

   ; Add additional items to the combobox.
   GUICtrlSetData($idComboBox, "Desactivé")

   ; Display the GUI.
   GUISetState(@SW_SHOW, $hGUI)

   Local $sComboRead = ""

   ; Loop until the user exits.
   While 1
      Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE, $idButton_Close
            ExitLoop

         Case $idComboBox
            $sComboRead = GUICtrlRead($idComboBox)
            MsgBox($MB_SYSTEMMODAL, "", "The combobox is currently displaying: " & $sComboRead, 0, $hGUI)

      EndSwitch
   WEnd

   ; Delete the previous GUI and all controls.
   GUIDelete($hGUI)
EndFunc   ;==>Example
Soit c'est activé, soit désactivé, mais pas les 2.

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 15:02
par dexter74
Bonjour,
En lisant le code des combos, j'ai rien compris sur sa mise en pratique avec le code.

Code : Tout sélectionner


; Creation du menu combo
$idComboBox = GUICtrlCreateCombo("Item 1", 10, 10, 185, 20)

; Choix pôosible et valeur par défaut dans le menu
GUICtrlSetData($idComboBox, "Item 2|Item 3", "Item 3")

; Afficher la GUI
GUISetState(@SW_SHOW, $hGUI)

; Rien compris à cet valeur 
 Local $sComboRead = ""





Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 15:06
par DimVar
Elles te permettent de sélectionner une valeur parmi plusieurs.
Dans ton cas, cela évite d'avoir plusieurs case (checkbox) de cochées et de devoir contrôler leur cohérences.
Teste le code que j'ai mis en exemple.

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 15:08
par dexter74
Salut,

tu pourrais me donner un exemple autre car je comprend pas très bien.

Comment on crée la condition selon la valeur précédente

Nom du service:
- Menu 1: Démarrer
- Menu 2: Arrêter
- Menu 3: Activer
- Menu 4: Désactiver


Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
        ; Create a GUI with various controls.
        Local $hGUI = GUICreate("Example", 300, 200)

        ; Create a combobox control.
        Local $idComboBox = GUICtrlCreateCombo("Activé", 10, 10, 185, 20)
        Local $idButton_Close = GUICtrlCreateButton("Quitter", 210, 170, 85, 25)

        ; Add additional items to the combobox.
        GUICtrlSetData($idComboBox, "Desactivé")
        GUICtrlSetData($idComboBox, "Démarré")
        GUICtrlSetData($idComboBox, "Arrêté")
        
        ; Display the GUI.
        GUISetState(@SW_SHOW, $hGUI)

        Local $sComboRead = ""

        ; Loop until the user exits.
        While 1
                Switch GUIGetMsg()
                        Case $GUI_EVENT_CLOSE, $idButton_Close
                                ExitLoop

                        Case $idComboBox
                                $sComboRead = GUICtrlRead($idComboBox)
                                MsgBox($MB_SYSTEMMODAL, "", "The combobox is currently displaying: " & $sComboRead, 0, $hGUI)

                EndSwitch
        WEnd

        ; Delete the previous GUI and all controls.
        GUIDelete($hGUI)
EndFunc   ;==>Example

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 15:11
par DimVar
$comboread ne sera que la variable qui te servira a stocker le retour d'un guictrlread.
J'essaie de te fournir un exemple....

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 15:15
par DimVar
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
   ; Create a GUI with various controls.
   Local $hGUI = GUICreate("Example", 300, 200)

   local $texte = GUICtrlCreateLabel ("Service winupdate" , 30,30)
   ; Create a combobox control.
   Local $idComboBox = GUICtrlCreateCombo("Activé", 100+30 , 28 , 150, 20)
   Local $idButton_Close = GUICtrlCreateButton("Close", 210, 170, 85, 25)

   ; Add additional items to the combobox.
   GUICtrlSetData($idComboBox, "Desactivé")

   ; Display the GUI.
   GUISetState(@SW_SHOW, $hGUI)

   Local $sComboRead = ""

   ; Loop until the user exits.
   While 1
      Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE, $idButton_Close
            ExitLoop

         Case $idComboBox
            $sComboRead = GUICtrlRead($idComboBox)
            MsgBox($MB_SYSTEMMODAL, "", "The combobox is currently displaying: " & $sComboRead, 0, $hGUI)

      EndSwitch
   WEnd

   ; Delete the previous GUI and all controls.
   GUIDelete($hGUI)
EndFunc   ;==>Example

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 15:23
par dexter74
Salut,
Merci pour ton exemple mais dit moi comment on fait pour définir tel résultat correspond à tel action.

Style Désactiver > Commande A
etc

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 15:26
par DimVar
Pour les start/stop, j'opterai pour des boutons ;)
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
   ; Create a GUI with various controls.
   Local $hGUI = GUICreate("Example", 300, 200)

   local $texteBouton = GUICtrlCreateLabel ("Service WinUpdate" , 30,50)
   Local $but1 = GUICtrlCreateButton ( "START", 150, 50 )
   Local $but2 = GUICtrlCreateButton ( "STOP", 200, 50 )

   local $texte = GUICtrlCreateLabel ("Service WinUpdate" , 30,30)
   ; Create a combobox control.
   Local $idComboBox = GUICtrlCreateCombo("Activé", 100+30 , 28 , 150, 20)
   Local $idButton_Close = GUICtrlCreateButton("Close", 210, 170, 85, 25)

   ; Add additional items to the combobox.
   GUICtrlSetData($idComboBox, "Desactivé")

   ; Display the GUI.
   GUISetState(@SW_SHOW, $hGUI)

   Local $sComboRead = ""

   ; Loop until the user exits.
   While 1
      Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE, $idButton_Close
            ExitLoop

         Case $idComboBox
            $sComboRead = GUICtrlRead($idComboBox)
            MsgBox($MB_SYSTEMMODAL, "", "The combobox is currently displaying: " & $sComboRead, 0, $hGUI)

      EndSwitch
   WEnd

   ; Delete the previous GUI and all controls.
   GUIDelete($hGUI)
EndFunc   ;==>Example

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 15:31
par DimVar
dexter74 a écrit : ven. 11 oct. 2019 15:23 Salut,
Merci pour ton exemple mais dit moi comment on fait pour définir tel résultat correspond à tel action.

Style Désactiver > Commande A
etc
Tu conserves par exemple ton bouton "VALIDER", qui lorsqu'il sera cliqué, checkera si la valeur des combo est sur activé ou desactivé. Et en fonction de l'etat, tu executes tel ou tel commande..

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 15:34
par dexter74
Merci mais tu peux me donner un exemple , j'adorai .

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 15:53
par DimVar
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
   ; Create a GUI with various controls.



   Local $hGUI = GUICreate("Example", 300, 200)



   local $WinUp = GUICtrlCreateLabel ("Service WinUpdate" , 30,30)
   Local $butOK = GUICtrlCreateButton ( "OK", 215, 26,80)


   local $texteBouton = GUICtrlCreateLabel ("Service WinUpdate" , 30,65)
   Local $butStart = GUICtrlCreateButton ( "START", 130, 60,80)
   Local $butStop = GUICtrlCreateButton ( "STOP", 215, 60,80)



   ; Create a combobox control.
   Local $idComboBox = GUICtrlCreateCombo("Activé", 130, 28, 80, 20)
   Local $idButton_Close = GUICtrlCreateButton("Close", 210, 170, 85, 25)

   ; Add additional items to the combobox.
   GUICtrlSetData($idComboBox, "Desactivé")

   ; Display the GUI.
   GUISetState(@SW_SHOW, $hGUI)

   Local $sComboRead = ""

   ; Loop until the user exits.
   While 1
      Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE, $idButton_Close
            ExitLoop

         Case $idComboBox
            $sComboRead = GUICtrlRead($idComboBox)
            MsgBox($MB_SYSTEMMODAL, "", "The combobox is currently displaying: " & $sComboRead, 0, $hGUI)

      EndSwitch
   WEnd

   ; Delete the previous GUI and all controls.
   GUIDelete($hGUI)
EndFunc   ;==>Example
Voila.
Lorsque le user clique sur OK, tu fais un ctrl read du combo et exécute les actions nécessaire (activer ou desactiver le service win update)


Cdlt, Dimvar.

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 16:08
par dexter74
Bonjour,

Le combo à pas une valeur d'état (0 ou 1 | ou 1 - 2) ce qui veux dire qu'en lisant la valeur, il ne peux pas récuperer l'état et donc pouvoir attribuer selon l'état une condition

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 16:14
par DimVar
As tu fais un guictrlread sur le combo ?
Tu dois récupérer la valeur du combo et donc faire tes conditions en fonction. Lis la doc de cette fonction, pour connaitre le code retour (ce ne sera pas 0 ou 1).

Cdlt, Dimvar.

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 16:34
par dexter74
Salut,
J'ai pas saisie correctement les conditions avec GUIctrlRead sur le combo (IF , Else, Elseif Endfunc)


Mon code retour indique toujours "Activer le service".

Code : Tout sélectionner

Func TEST0()
$VIERGE_WinUpdates = GUICtrlRead($Combo_WinUpdates)

   if GUICtrlRead($VIERGE_WinUpdates) = "Activer le service" then
	  MsgBox($MB_SYSTEMMODAL, "", $VIERGE_WinUpdates)

   ElseIf  GUICtrlRead($VIERGE_WinUpdates) = "Désactiver le service" then
	  MsgBox($MB_SYSTEMMODAL, "", "TESTE 2")

   Else
   EndIf
EndFunc


Code source entier:

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>

; https://www.autoitscript.com/forum/topic/10430-basic-gui-with-2-buttons/
; https://www.autoitscript.fr/forum/viewtopic.php?t=9806
; https://www.autoitscript.com/forum/topic/139137-how-to-simulate-mouse-click-without-moving-the-cursor/?do=findComment&comment=975559
; https://www.autoitscript.com/autoit3/docs/functions/ProcessExists.htm
; https://www.autoitscript.fr/forum/viewtopic.php?t=3816#p22743
; GUICtrlRead
; MsgBox($MB_SYSTEMMODAL, "", "TESTE ")


$GUI_BASIQUE 				= GUICreate("Gestions des services Windows - par Drthrax", 525, 100, 1464, 584)
$bouton_OK 					= GUICtrlCreateButton("OK", 300, 60, 100)
$bouton_Close 				= GUICtrlCreateButton("Close", 410, 60, 100)

; Microsoft Windows Update
local $Label_WinUpdate 		= GUICtrlCreateLabel ("Service Windows Update" , 10, 10, 150)
Local $Bouton1_WinUpdates	= GUICtrlCreateButton("Arrêter le service", 300, 10, 100, 30)
Local $Bouton2_WinUpdates	= GUICtrlCreateButton("Démarrer le service", 410, 10, 100, 30)
Local $Combo_WinUpdates 	= GUICtrlCreateCombo("Activer le service", 140, 10, 150, 100)
							  GUICtrlSetData($Combo_WinUpdates, "Désactiver le service")


LOCAL $VIERGE_WinUpdates 	= ""
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg

	  ; Windows Updates
	   Case $Combo_WinUpdates
	  test()


	  Case $GUI_EVENT_CLOSE, $bouton_Close
	  Exit

	EndSwitch
 WEnd



Func test()
		 $VIERGE_WinUpdates = GUICtrlRead($Combo_WinUpdates)

		 if ($VIERGE_WinUpdates="Activer le service") Then
			MsgBox($MB_SYSTEMMODAL, "", "TESTE 1")
			ElseIf ($VIERGE_WinUpdates="Désactiver le service") then
			   MsgBox($MB_SYSTEMMODAL, "", "TESTE 2")

		 Else
		 EndIf
EndFunc

Code Correctif provisoire

Code : Tout sélectionner

Func test()
		 $VIERGE_WinUpdates = GUICtrlRead($Combo_WinUpdates)

		 if ($VIERGE_WinUpdates="Activer le service") Then
			MsgBox($MB_SYSTEMMODAL, "", "TESTE 1")
			ElseIf ($VIERGE_WinUpdates="Désactiver le service") then
			   MsgBox($MB_SYSTEMMODAL, "", "TESTE 2")

		 Else
		 EndIf
EndFunc

Re: Administateur - Gestion des services Windows  

Posté : ven. 11 oct. 2019 21:08
par walkson
Bonjour,
Je crois que DimVar est parti aux champignons :lol:
Concernant la fonction TEST(), vous avez 2 possibilités, soit Activer le service, soit Désactiver le service. Si ce n'est pas l'une, c'est l'autre, et vice versa. Donc:
Func test()
       $VIERGE_WinUpdates = GUICtrlRead($Combo_WinUpdates)

       if ($VIERGE_WinUpdates="Activer le service") Then
         MsgBox($MB_SYSTEMMODAL, "", "TESTE 1")
         Else
          MsgBox($MB_SYSTEMMODAL, "", "TESTE 2")
       EndIf
EndFunc
Quand plusieurs conditions sont imbriquées mieux vaut utiliser Switch ou Select.
En reprenant l'idée de DimVar, voici une possibilité
;#RequireAdmin ;peut être nécessaire ?
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>


Global $lire, $service
$GUI_BASIQUE            = GUICreate("Gestions des services Windows - par Drthrax", 525, 100, -1, -1)
local $Label_WinUpdate     = GUICtrlCreateLabel ("" , 10, 50, 150,20)
Local $bouton_OK     = GUICtrlCreateButton("Valider", 300, 50, 100, 30)
Local $bouton_Close  = GUICtrlCreateButton("Exit", 410, 10, 100, 30)
Local $Combo_WinUpdates    = GUICtrlCreateCombo("", 140, 50, 150, 100)
                       GUICtrlSetData($Combo_WinUpdates,"Démarrer en pause|Démarrer et activer|Activer|en pause|Désactiver le service", "Démarrer en pause")
Local $Combo_service = GUICtrlCreateCombo("", 140, 10, 150, 100)
                       GUICtrlSetData($Combo_service,"service1|service2|service3", "service1")
                       GUICtrlSetData($Label_WinUpdate,GUICtrlRead($Combo_service))
GUISetState(@SW_SHOW)


While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg

     ; Windows Updates
      Case $bouton_OK
         $lire = GUICtrlRead($Combo_WinUpdates)
         $service = GUICtrlRead($Combo_service)
         test()
      Case $Combo_service
         GUICtrlSetData($Label_WinUpdate,GUICtrlRead($Combo_service))


     Case $GUI_EVENT_CLOSE, $bouton_Close
     Exit

   EndSwitch
 WEnd



Func test()
If $lire = "" Then Return SetError(1)
If $service = "" Then Return SetError(2)
Switch $lire
   Case "Démarrer en pause"
      ;RunWait(@ComSpec & " /c NET START" & $service & " /Y",@SystemDir,@SW_HIDE)
      ;RunWait(@ComSpec & " /c NET pause" & $service & " /Y",@SystemDir,@SW_HIDE)
      MsgBox(0,$service,"Démarrer en pause")
   Case "Démarrer et activer"
      ;RunWait(@ComSpec & " /c NET START" & $service & " /Y",@SystemDir,@SW_HIDE)
      ;RunWait(@ComSpec & " /c NET continue" & $service & " /Y",@SystemDir,@SW_HIDE)
      MsgBox(0,$service,"Démarrer et activer")
   Case "Activer"  ;=> Activer ou en pause n'est peut être pas nécessaire ?
      ;RunWait(@ComSpec & " /c NET continue" & $service & " /Y",@SystemDir,@SW_HIDE)
   Case "en pause"
      ;RunWait(@ComSpec & " /c NET pause" & $service & " /Y",@SystemDir,@SW_HIDE)
   Case "Désactiver le service"
      ;RunWait(@ComSpec & " /c NET STOP" & $service & " /Y",@SystemDir,@SW_HIDE)
      MsgBox(0,$service,"Désactiver le service")
EndSwitch

EndFunc
Notez que je n'ai pas testé le CMD, donc à voir!
Petite question dont je n'ai pas trouvé de réponse, dans @ComSpec & " /c NET STOP" & $service & " /Y" à quoi correspond le /Y ?

Re: Administateur - Gestion des services Windows

Posté : ven. 11 oct. 2019 22:10
par dexter74
Bonjour,

Je te remercie énormément pour avoir fait avancer mon projet.


La commande de base:

Code : Tout sélectionner

net start $service


Correctif de la commande: Il faut penser à mettre un ESPACE après la valeur START car sinon la commande et le nom du service seront collés
(Sans espace: net start$service)

Code : Tout sélectionner

RunWait(@ComSpec & " /c NET START " & $service,@SystemDir,@SW_HIDE)


Résultat final:

Code : Tout sélectionner

;#RequireAdmin ;peut être nécessaire ?
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>

; GUI
$GUI_BASIQUE = GUICreate("Gestions des services Windows - par Drthrax", 570, 350, -1, -1)

; Variable Global
Global $Nom_du_service	= ""
Global $service			= ""

Local $bouton_OK  		= GUICtrlCreateButton("Valider", 460, 8, 100, 25)
Local $bouton_Close		= GUICtrlCreateButton("Exit", 460, 38, 100, 25)

; https://www.sia-informatique.com/desactiver-services-inutiles-windows-10/

; [iphlpsvc]									Assistance IP
; [TrkWks]										Client de suivi de lien distribué
; [CscService]									Fichiers hors connexion
; [IKEEXT]										Modules de génération de clés IKE et AuthIP
; [diagnosticshub.standardcollector.service]	Service Collecteur standard du concentrateur de diagnostic Microsoft
; [WerSvc]										Service de rapport d’erreurs Windows
; [DPS]											Service de stratégie de diagnostic
; [WdiServiceHost]								Service hôte WDIServiceHost

; iphlpsvc|TrkWks|CscService|IKEEXT|diagnosticshub.standardcollector.service|WerSvc|DPS|WdiServiceHost

Local $Label_Defaut									= GUICtrlCreateLabel ("Défaut					: Aucun service Windows correspond. (Sécurité)", 10, 80, 600,20)

Local $Label_Sysmain								= GUICtrlCreateLabel ("Sysmain					: Gère et améliore les performances du système dans le temps.", 10, 110, 600,20)
Local $Label_WSearch								= GUICtrlCreateLabel ("WSearch				: Service d'indexation de Windows", 10, 130, 600,20)
Local $Label_Wuauserv								= GUICtrlCreateLabel ("WUauserv				: Service pour les mises à jour Windows", 10, 150, 600,20)
Local $Label_iphlpsvc								= GUICtrlCreateLabel ("IPhlpsvc				: Assitance IP ", 10, 170, 600,50)
Local $Label_TrkWks									= GUICtrlCreateLabel ("TrkWks					: Client de suivi de lien distribué", 10, 190, 600,50)
Local $Label_CscService								= GUICtrlCreateLabel ("CSCService				: Fichiers hors connexion  ", 10, 210, 600,50)
Local $Label_WdiServiceHost							= GUICtrlCreateLabel ("WdiServiceHost				: Service hôte WDIServiceHost", 10, 230, 600,50)

Local $Label_WerSvc									= GUICtrlCreateLabel ("WerSvc					: Service de rapport d’erreurs Windows", 10, 250, 600,50)
Local $Label_DPS									= GUICtrlCreateLabel ("DPS					: Service de stratégie de diagnostic", 10, 270, 600,50)
Local $Label_IKEEXT									= GUICtrlCreateLabel ("IKeext					: Modules de génération de clés IKE et AuthIP ", 10, 290, 600,50)
Local $Label_diagnosticshubstandardcollectorservice	= GUICtrlCreateLabel ("diagnosticshub.standardcoll.service	: Service Collecteur standard du concentrateur de diagnostic Microsoft", 10, 310, 600,50)

Local $Label_WinUpdate	= GUICtrlCreateLabel ("", 10, 12, 200,20)

Local $Combo_service    = GUICtrlCreateCombo("Defaut", 210, 10, 230, 100)
						; Définir la variable $Combo_service en définissant les valeurs
					  GUICtrlSetData($Combo_service,"Sysmain|Wsearch|Wuauserv|iphlpsvc|TrkWks|CscService|IKEEXT|diagnosticshub.standardcollector.service|WerSvc|DPS|WdiServiceHost", "Defaut") ;  "Sysmain|Wsearch|Wuauserv|iphlpsvc|TrkWks|CscService|IKEEXT|diagnosticshub.standardcollector.service|WerSvc|DPS|WdiServiceHost"
						;  Récupére les valeurs via la valeur $Combo_service
						  GUICtrlSetData($Label_WinUpdate,GUICtrlRead($Combo_service))

Local $Label_service	= GUICtrlCreateLabel ("Etat du service", 10, 40, 100,20)

Local $Combo_WinUpdates	= GUICtrlCreateCombo("", 210, 40, 230, 100)
						; Définir la variable $Combo_WinUpdates en définissant les valeurs ...
						  GUICtrlSetData($Combo_WinUpdates,"Démarrer le service|Arrêter le service|Service en Automatique|Service en Manuel|Service en Désactiver", "")

GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
   Switch $nMsg
	  Case $bouton_OK
		 ; Définir la valeur $Nom_du_service en en lisant la valeur $Combo_WinUpdates
		 $Nom_du_service = GUICtrlRead($Combo_WinUpdates)
		 $service = GUICtrlRead($Combo_service)
		 test()

	  Case $Combo_service
	  ; Configuration de la variable $Label_WinUpdate en lisant la valeur $Combo_service
		 GUICtrlSetData($Label_WinUpdate,GUICtrlRead($Combo_service))
		 
	  Case $GUI_EVENT_CLOSE,$bouton_Close
	  Exit
   EndSwitch
WEnd

Func test()
; Vérification en cas d'erreur
   If $Nom_du_service = "" Then Return SetError(1)
   If $service = "" Then Return SetError(2)

	  Switch $Nom_du_service
		 Case "Démarrer le service"
			MsgBox(0,$service,"Démarrage du service " & $service)
			RunWait(@ComSpec & " /c NET START " & $service,@SystemDir,@SW_HIDE)

		 Case "Arrêter le service"
			MsgBox(0,$service,"Arrêt du service " & $service)
			RunWait(@ComSpec & " /c NET STOP " & $service,@SystemDir,@SW_HIDE)

		 Case "Service en Automatique"
			MsgBox(0,$service,"Le service " & $service & " est en mode Automatique")
			RunWait(@ComSpec & " /c sc config " & $service & " start=Auto",@SystemDir,@SW_HIDE)

		 Case "Service en Manuel"
			MsgBox(0,$service,"Le service " & $service & " est en mode Manuel")
			RunWait(@ComSpec & " /c sc config " & $service & " start=Demand",@SystemDir,@SW_HIDE)

		 Case "Service en Désactiver"
			MsgBox(0,$service,"Le service " & $service & " est en mode Désactiver")
			RunWait(@ComSpec & " /c sc config " & $service & " start=Disabled",@SystemDir,@SW_HIDE)
	  EndSwitch

EndFunc

Screenshoot du projet
Capture.PNG
Petite question dont je n'ai pas trouvé de réponse, dans @ComSpec & " /c NET STOP" & $service & " /Y" à quoi correspond le /Y ?
- LA valeur /Y est un paramètre de la commande pour forcer la validation si le retour de la commande demande une validation.
- Dans la documentation, y'a une erreur. (Un espace manquant)