Bonjour !
Je suis entrain de créer un gadget Windows pour gérer les services Windows afin de me faciliter la vie au boulot.
Le principe c'est d'avoir dans un tableau une liste de service avec :
- le nom
- l'état (démarrer ou arrêter)
- action (bouton pour démarrer ou arrêter)
Voici donc la page html :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 <html> <style> body { width:300; height:200; } </style> <head> <script src="js/Services.js" language="JavaScript"></script> </head> <body> <table id="tableau" border="1" CELLSPACING=1> <thead> <tr> <td style="width:200" align="center">Nom</td> <td style="width:50" align="center">Etat</td> <td style="width:50" align="center">Action</td> </tr> </thead> </table> <script language="JavaScript"> SearchServices(); </script> <input type="button" align="right" onclick="SearchServices();" value="Actualiser"/> </body> </html>
En gros j'ai un tableau de 3 colonnes, puis j'appelle la fonction SearchServices() pour remplir le tableau, et un bouton Actualiser qui appelle aussi la fonction SearchServices().
Coté JavaScript, j'ai un fichier Services.js avec la fonction SearchServices() :
DeleteRows() supprime toutes les lignes du tableau (pas de souci de ce coté).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // Vider le tableau et rechercher les services function SearchServices() { DeleteRows(); ServicesList(); }
Par contre voici la fonction ServicesList() :
Elle permet, en passant par une ligne de commande, de retrouver tous les services Windows, puis je récupère que les services qui commence par "IS-JA" et je l'ajoute à mon tableau grâce à la fonction AddRow(id, name, etat) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 function ServicesList() { // Initialisation de la commande dos pour la recherche de service var wsShell = new ActiveXObject("WScript.Shell"); var cmd = wsShell.Exec("cmd /c sc query state= all"); var line; var serviceName = ""; var id = 1; // Pour chaque service trouvé while (!cmd.StdOut.AtEndOfStream) { line = cmd.StdOut.ReadLine(); // Si on est sur "SERVICE_NAME" if (line.substring(0, 12) == "SERVICE_NAME") { // Si le nom du service commence par "IS" ou "IP" if ((line.substring(14, 19) == "IS-JA")) //|| (line.substring(14, 17) == "IP.")) { serviceName = line.substring(14); } } if (line.substring(8, 13) == "STATE") { if (serviceName != "") { // Ajouter le service dans le tableau AddRow(id, serviceName, line.substring(29, 30)); id += 1; serviceName = ""; } } } }
Ici j'ajoute donc une nouvelle ligne et remplit les 3 colonnes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 function AddRow(id, name, etat) { var tableau = document.getElementById("tableau"); // Ajout d'une nouvelle ligne var ligne = tableau.insertRow(-1); // Initialiser les cellules var colonne1 = ligne.insertCell(0); var colonne2 = ligne.insertCell(1); var colonne3 = ligne.insertCell(2); // Initialiser le bouton d'Action var button = document.createElement("input"); button.type = "button"; button.name = "button" + id; // Remplir la 1ére cellule avec le nom du service colonne1.innerHTML += name; // Remplir la 2éme et 3éme cellule suivant l'état du service if (etat == 1) { colonne2.innerHTML += "Arrêter"; button.value = "Démarrer"; button.setAttribute("onclick", "Start(" + id + ")"); } else { colonne2.innerHTML += "Démarrer"; button.value = "Arrêter"; button.setAttribute("onclick", "Stop(" + id + ")"); } // Insérer le bouton dans le tableau colonne3.appendChild(button); }
Par contre pour la colonne Action (3éme colonne), j'ajoute un bouton avec un événement "onclick" qui va soit exécuter la fonction Start(id) ou Stop(id).
Si je lance la page .html sur IE => tout fonctionne nikel, j'ai la liste des services et je peux peux les arrêter et démarrer.
Mais quand je transforme le tout en .gadget (zip du html, js, ...) le gadget s’exécute correctement (j'ai la liste des services), mais par contre l'événement "onclick" des boutons Démarrer et Arrêter du tableau ne fonctionne pas :-/
Par contre le bouton Actualiser en dessous du tableau fonctionne bien...
Du coup je ne sais que faire pour résoudre ce souci, et je ne connais pas très bien le JavaScript (j'ai commencé à apprendre Samedi :-S), du coup j'ai surement fait une erreur
Je vous remercie déjà d'avoir lu mon post en espérant avoir été le plus clair possible.
Partager