Page 1 sur 1
[..]Liste des services cliquables
Posté : ven. 01 oct. 2010 09:39
par ricky
Hello,
voici ce que j'aimerais réaliser.
Aller dans la base de registre et afficher dans une liste (avec quelques infos, comme le démarrage, l'utilisateur, leur état,...) tous les services installés. A côté de chaque service une case à cocher. On peut cocher une ou plusieurs cases et quand on valide on peut choisir plusieurs options, redémarrer, changer d'utilisateur,...
Je ne vois vraiment pas comment faire. Merci d'avance pour votre aide.
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 09:45
par Jerome
Coucou,
Je pense que l'UDF
Services.au3 et ServicesConstants.au3 contiennent toutes les fonctions nécessaire à la réalisation de votre projet.
Inutile d'aller chercher les informations dans la base de registre.
Les fonctions _Service_Start et _Service_Stop vous seront alors utile dans ce cas ci pour un redémarrage.
Pour plus d'informations, je vous renvoi sur le post de l'UDF.
Jérôme
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 09:58
par ricky
Merci pour ta réponse, je connais cet udf, mais le problème n'est pas pour changer le paramétrage des services, mais pour la GUI.
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 10:03
par Jerome
Coucou,
Je pense que tu peux afficher tous tes services dans une listview. Avec leurs états (démarré / arrêté).
Puis, pour l'histoire de faire des modifications, soit tu fait un contrôle sur ta ListView pour un double Click sur un item, ce qui t'ouvre une nouvelle GUI qui te donne des possibilité de redémarrage / modifications que tu souhaite.
Soit tu fait une combobox pour sélectionner un services et faire ce que tu veux.
L'histoire du double Click me semble plus adapter pour ton projet.
edit :Voici un code que j'ai déjà dans un de mes scripts pour le contrôle double Click dans une listview :
► Afficher le texte
Code : Tout sélectionner
$ListView1 = GUICtrlCreateListView("", 376, 80, 322, 198)
_GUICtrlListView_AddColumn($ListView1,'Fichiers',342)
$Lst_Handle = GUICtrlGetHandle(-1)
GUIRegisterMsg($WM_NOTIFY, "WM_ListView_DoubleClick")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button2
Exit
EndSwitch
Sleep(10)
If $fDblClk = True Then
$fDblClk = False
Lst_ValuesClick()
EndIf
WEnd
Func Lst_ValuesClick()
$SelIndex = _GUICtrlListView_GetSelectedIndices($ListView1) +1
ShellExecute(blabla ////)
EndFunc
Func WM_ListView_DoubleClick($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $tNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
If DllStructGetData($tNMHDR, 1) = $Lst_Handle Then
If DllStructGetData($tNMHDR, 3) = $NM_DBLCLK Then $fDblClk = True
EndIf
$tNMHDR = 0
Return $GUI_RUNDEFMSG
EndFunc
Jérôme
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 10:06
par ricky
Mais je vois pas du tout comment faire...
Tu peux me donner une ébauche?
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 10:10
par Jerome
Regarde l'edit, dsl j'ai posté quand ta posté ;...
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 10:15
par ricky
J'ai des erreurs, c'est normal?
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 10:31
par Jerome
...
C'est sur qu'il ne faut pas copier betement le code que je vous ai donné.
C'est un bout de code, il faut le mettre dans une Gui...
Bref.
Voici un code (celui-ci vous pouvez l'utiliser brut) qui list dans la console tous les services présents sur votre ordinateur, c'est un bon point de départ.
Code : Tout sélectionner
$strComputer = "127.0.0.1"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colProcessList = $objWMIService.ExecQuery("Select * from Win32_Service")
ConsoleWrite($colProcessList.Count & " services found.")
For $objProcess In $colProcessList
ConsoleWrite($objProcess.Name & @CRLF)
Next
Edit : Voici quelque chose de fonctionnel, a vous de modifier, je ne vais pas mâcher tous le travail
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <Array.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Services", 633, 447, 192, 124)
$List1 = GUICtrlCreateListView("", 8, 8, 617, 383)
_GUICtrlListView_AddColumn($List1, "Servcies Name", 200)
_GUICtrlListView_AddColumn($List1, "Status", 200)
_GUICtrlListView_AddColumn($List1, "Description", 200)
$Button1 = GUICtrlCreateButton("Lister", 144, 408, 97, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Exit", 336, 408, 97, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Lister()
Case $Button2
exit
EndSwitch
WEnd
Func Lister()
$strComputer = "127.0.0.1"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colProcessList = $objWMIService.ExecQuery("Select * from Win32_Service")
For $objProcess In $colProcessList
$services = $objProcess.Caption
$status = $objProcess.State
$Description = $objProcess.Description
GUICtrlCreateListViewItem($services & "|" & $status & "|" & $Description, $List1)
Next
EndFunc
Jérôme
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 10:59
par ricky
Parfait, j'ai adapté avec les colonnes que je voulais, maintenant, c'est le problème avec le double click, j'ai essayé de le mettre, mais $fDblClk vient d'ou?
ou créer un menu avec le click droit, c'est facile?
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 11:02
par Jerome
Coucou,
La variable dans mon exemple $fDblClk est un contrôle pour savoir si un DoubleClick a été effectuer.
Le code que je vous ai fournit est facilement adaptable à l'interface de mon post précèdent.
Jérôme
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 11:58
par ricky
Je suis toujours dessus...
est-il possible de transformer GUICtrlCreateListViewItem($services & "|" & $status & "|" & $Description, $List1) en array?
Re: [..]Liste des services cliquables
Posté : ven. 01 oct. 2010 15:43
par Jerome
Coucou,
Oui c'est possible.
Bon aller, je t'avance un peu, choisit un service dans la liste et double click dessus .
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <Array.au3>
#Region ### START Koda GUI section ### Form=
Global $fDblClk = False
Global $ar_Array
$Form1 = GUICreate("Services", 633, 447, 192, 124)
$List1 = GUICtrlCreateListView("", 8, 8, 617, 383)
_GUICtrlListView_AddColumn($List1, "Servcies Name", 200)
_GUICtrlListView_AddColumn($List1, "Status", 200)
_GUICtrlListView_AddColumn($List1, "Description", 200)
$Lst_Handle = GUICtrlGetHandle(-1)
$Button1 = GUICtrlCreateButton("Lister", 144, 408, 97, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Exit", 336, 408, 97, 25, $WS_GROUP)
GUIRegisterMsg($WM_NOTIFY, "WM_ListView_DoubleClick")
GUISetState(@SW_SHOW, $Form1)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Lister()
Case $Button2
exit
EndSwitch
Sleep(10)
If $fDblClk = True Then
$fDblClk = False
Lst_ValuesClick()
EndIf
WEnd
Func Lister()
_GUICtrlListView_DeleteAllItems($List1)
$strComputer = "127.0.0.1"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colProcessList = $objWMIService.ExecQuery("Select * from Win32_Service")
For $objProcess In $colProcessList
$services = $objProcess.Caption
$status = $objProcess.State
$Description = $objProcess.Description
GUICtrlCreateListViewItem($services & "|" & $status & "|" & $Description, $List1)
Next
EndFunc
Func Lst_ValuesClick()
$SelIndexItem = _GUICtrlListView_GetSelectedIndices($List1) +0
$SelIndex = _GUICtrlListView_GetItem($List1, $SelIndexItem)
$Form2 = GUICreate("Action à réaliser", 333, 159, 327, 268)
$Label1 = GUICtrlCreateLabel("Vous avez sélectionner le service : ", 16, 16, 171, 17)
$Label2 = GUICtrlCreateLabel("", 16, 40, 308, 20)
$Label3 = GUICtrlCreateLabel("Action : ", 16, 80, 43, 17)
$Combo1 = GUICtrlCreateCombo("", 64, 80, 60, 25)
GUICtrlSetData(-1, "Start|Stop|Restart")
$Button3 = GUICtrlCreateButton("Lancer", 224, 80, 89, 25, $WS_GROUP)
$Button4 = GUICtrlCreateButton("Fermer", 224, 110, 89, 25, $WS_GROUP)
GUISetState()
GUICtrlSetData($Label2, $SelIndex[3])
GUICtrlSetState($Button3, $GUI_DISABLE)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
GUIDelete($Form2)
ExitLoop
Case $Button4
GUIDelete($Form2)
ExitLoop
EndSwitch
Sleep(10)
If GUICtrlRead($Combo1) <> "" Then
GUICtrlSetState($Button3, $GUI_ENABLE)
Endif
WEnd
EndFunc
Func WM_ListView_DoubleClick($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $tNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
If DllStructGetData($tNMHDR, 1) = $Lst_Handle Then
If DllStructGetData($tNMHDR, 3) = $NM_DBLCLK Then $fDblClk = True
EndIf
$tNMHDR = 0
Return $GUI_RUNDEFMSG
EndFunc
Jérôme
Re: [..]Liste des services cliquables
Posté : lun. 04 oct. 2010 08:13
par ricky
Merci beaucoup, c'est vraiment pas mal.
Est-il possible de faire un tri des colonnes en pressant sur le haut des colonnes?
Re: [..]Liste des services cliquables
Posté : lun. 04 oct. 2010 11:07
par Jerome
Coucou,
Une
recherche sur le forum pourrait s'averer utile ...
Jérôme