Administateur - Gestion des services Windows

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
dexter74
Niveau 3
Niveau 3
Messages : 40
Enregistré le : sam. 06 févr. 2010 04:45
Status : Hors ligne

Administateur - Gestion des services Windows

#1

Message par dexter74 » jeu. 10 oct. 2019 22:26

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
Modifié en dernier par dexter74 le ven. 11 oct. 2019 10:57, modifié 2 fois.

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 839
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#2

Message par DimVar » ven. 11 oct. 2019 10:23

Bonjour,

Quel est le soucis ?

Cdlt, Dimvar.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

dexter74
Niveau 3
Niveau 3
Messages : 40
Enregistré le : sam. 06 févr. 2010 04:45
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#3

Message par dexter74 » ven. 11 oct. 2019 10:44

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

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 839
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#4

Message par DimVar » ven. 11 oct. 2019 12:32

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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 839
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#5

Message par DimVar » ven. 11 oct. 2019 13:36

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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

dexter74
Niveau 3
Niveau 3
Messages : 40
Enregistré le : sam. 06 févr. 2010 04:45
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#6

Message par dexter74 » ven. 11 oct. 2019 14:02

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 = ""




Modifié en dernier par dexter74 le ven. 11 oct. 2019 14:09, modifié 2 fois.

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 839
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#7

Message par DimVar » ven. 11 oct. 2019 14:06

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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

dexter74
Niveau 3
Niveau 3
Messages : 40
Enregistré le : sam. 06 févr. 2010 04:45
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#8

Message par dexter74 » ven. 11 oct. 2019 14:08

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
Modifié en dernier par dexter74 le ven. 11 oct. 2019 14:12, modifié 1 fois.

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 839
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#9

Message par DimVar » ven. 11 oct. 2019 14:11

$comboread ne sera que la variable qui te servira a stocker le retour d'un guictrlread.
J'essaie de te fournir un exemple....
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 839
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#10

Message par DimVar » ven. 11 oct. 2019 14:15

#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
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

dexter74
Niveau 3
Niveau 3
Messages : 40
Enregistré le : sam. 06 févr. 2010 04:45
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#11

Message par dexter74 » ven. 11 oct. 2019 14: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

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 839
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#12

Message par DimVar » ven. 11 oct. 2019 14:26

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
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 839
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#13

Message par DimVar » ven. 11 oct. 2019 14:31

dexter74 a écrit :
ven. 11 oct. 2019 14: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..
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

dexter74
Niveau 3
Niveau 3
Messages : 40
Enregistré le : sam. 06 févr. 2010 04:45
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#14

Message par dexter74 » ven. 11 oct. 2019 14:34

Merci mais tu peux me donner un exemple , j'adorai .

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 839
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#15

Message par DimVar » ven. 11 oct. 2019 14:53

#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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

dexter74
Niveau 3
Niveau 3
Messages : 40
Enregistré le : sam. 06 févr. 2010 04:45
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#16

Message par dexter74 » ven. 11 oct. 2019 15:08

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

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 839
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#17

Message par DimVar » ven. 11 oct. 2019 15:14

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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

dexter74
Niveau 3
Niveau 3
Messages : 40
Enregistré le : sam. 06 févr. 2010 04:45
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#18

Message par dexter74 » ven. 11 oct. 2019 15:34

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

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 732
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: Administateur - Gestion des services Windows  

#19

Message par walkson » ven. 11 oct. 2019 20:08

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 ?
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

dexter74
Niveau 3
Niveau 3
Messages : 40
Enregistré le : sam. 06 févr. 2010 04:45
Status : Hors ligne

Re: Administateur - Gestion des services Windows

#20

Message par dexter74 » ven. 11 oct. 2019 21:10

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)
Modifié en dernier par dexter74 le ven. 11 oct. 2019 23:16, modifié 12 fois.

Répondre