Lister les services + infos + pause/stop/start + changement de type de demarrage (méthode : api enum et registre)

Soyez le premier à donner votre avis sur cette source.

Vue 9 864 fois - Téléchargée 1 142 fois

Description

Ce code a pour but de lister tout les services du système et de donner pas mal d'informations à leur sujet.
OK, existe déjà sur VBfrance, mais c'est le seul (après une recherche rapide) qui donne tant d'infos.

La méthode utilisée : API pour le listing (pas de WMI), et récupération d'infos dans le registre.

MAJ1 : code meilleur (grâce à Renfield) et plus de bug à la compilation en natif
MAJ2 : possibilité de mettre en pause/reprendre, de stopper, de shutdown et de démarrer un service
MAJ3 : possibilité de changer le type de démarrage (Automatique, Manuel, Désactivé), ce qui permet désormais de lancer n'importe quel service uniquement depuis l'executable du projet.

Les différentes actions sont obtenues par le click droit sur le listview.

Un grand merci à Renfield qui a pris le temps de corriger cette source ^_^

Source / Exemple :


'APIs principales

'ouvre le Service Control Manager
Private Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As Long
'pour l'énumération
Private Declare Function EnumServicesStatus Lib "advapi32.dll" Alias "EnumServicesStatusA" (ByVal hSCManager As Long, ByVal dwServiceType As Long, ByVal dwServiceState As Long, lpServices As Any, ByVal cbBufSize As Long, pcbBytesNeeded As Long, lpServicesReturned As Long, lpResumeHandle As Long) As Long
'ferme le handle d'un service ouvert
Private Declare Function CloseServiceHandle Lib "advapi32.dll" (ByVal hSCObject As Long) As Long
'démarre un service
Private Declare Function StartService Lib "advapi32.dll" Alias "StartServiceA" (ByVal hService As Long, ByVal dwNumServiceArgs As Long, ByVal lpServiceArgVectors As Long) As Long
Private Declare Function OpenService Lib "advapi32.dll" Alias "OpenServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal dwDesiredAccess As Long) As Long
'permet des actions sur un service
Private Declare Function ControlService Lib "advapi32.dll" (ByVal hService As Long, ByVal dwControl As Long, lpServiceStatus As SERVICE_STATUS) As Long
'change les paramètres du service
Private Declare Function ChangeServiceConfig Lib "advapi32.dll" Alias "ChangeServiceConfigA" (ByVal hService As Long, ByVal dwServiceType As Long, ByVal dwStartType As Long, ByVal dwErrorControl As Long, ByVal lpBinaryPathName As String, ByVal lpLoadOrderGroup As String, lpdwTagId As Long, ByVal lpDependencies As String, ByVal lpServiceStartName As String, ByVal lpPassword As String, ByVal lpDisplayName As String) As Long

'le reste dans le *.zip, avec un exemple

Conclusion :


Voilà, un bout de code en plus. Peut être un jour le projet en entier ;)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Quelqu'un pour mettre une note ? lol, toujours pas eu une seule depuis 4 mois ! ^^

@+ ^_-
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

re,

Pour ceux que ca interesse, voici un exemple concret avec la methode que j'ai cite plus haut (via QueryServiceConfig)

http://systemzeb.free.fr/ServiceInfo.zip

++
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Vlà la MAJ3 : changement de type de démarrage avec le popup menu.
Les types BOOT_START et SYSTEM_START ne peuvent être appliqués par l'utilisateur.
@+
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Merci, merci...
Pleins de petits détails qui améliorent le tout.

Le changement de type de démarrage est presque terminé...

Encore quelques fonctions à rajouter avant de faire une classe ^^

Merci encore, @+
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Pas trop mal..

Quelques conseils, suite au test du programme :

Enlève le MultiSelect

dans le MouseDown, selectionne l'item survollé :
Private Sub LV8_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim Item As ListItem
If Button = 2 Then
Set Item = LV8.HitTest(x, y)
If Not Item Is Nothing Then
Item.Selected = True

tu peux activer le tri dans le Form_Load :
LV8.SortKey = 0
LV8.SortOrder = lvwAscending
LV8.Sorted = True

pour le tri, toujours, met en ASC par defaut :
Private Sub LV8_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
'réorganise les objets du listview
If LV8.SortKey = ColumnHeader.Index - 1 Then
If Not LV8.SortOrder = lvwAscending Then
LV8.SortOrder = lvwAscending
Else
LV8.SortOrder = lvwDescending
End If
Else
LV8.SortKey = ColumnHeader.Index - 1
LV8.SortOrder = lvwAscending
End If
End Sub

pour placer dans le clipboard, évite de faire de multiples concaténations :

Private Sub copy_to_clipboard_Click()
'copie dans le clipboard les infos sur le service
Dim sBuffer As String
On Error Resume Next

With LV8.SelectedItem
Clipboard.Clear
sBuffer = "Service=" & .Text & vbNewLine & _
"Désignation=" & .SubItems(1) & vbNewLine & _
"Etat=" & .SubItems(2) & vbNewLine & _
"Type de service=" & .SubItems(3) & vbNewLine & _
"Le service accepte=" & .SubItems(4) & vbNewLine & _
"CheckPoint=" & .SubItems(5) & vbNewLine & _
"WaitHint=" & .SubItems(6) & vbNewLine & _
"DependOnService=" & .SubItems(7) & vbNewLine & _
"Description=" & .SubItems(8) & vbNewLine & _
"DiagnosticsMessageFile=" & .SubItems(9) & vbNewLine & _
"ErrorControl=" & .SubItems(10) & vbNewLine & _
"FailureActions=" & .SubItems(11) & vbNewLine & _
"Group=" & .SubItems(12) & vbNewLine & _
"ImagePath=" & .SubItems(13) & vbNewLine & _
"ObjectName=" & .SubItems(14) & vbNewLine & _
"Start=" & .SubItems(15) & vbNewLine & _
"Tag=" & .SubItems(16) & vbNewLine

Clipboard.SetText sBuffer
End With
End Sub

un On error évité en faisant :
Private Sub LV8_ItemClick(ByVal Item As MSComctlLib.ListItem)
txtInfo.Text = Item.SubItems(8)
End Sub

au lieu de ton LV8_Click()
deuxième avantage, ca fonctionne même quand on se déplace avec les touches fléchées...



prochaine étape : créer la classe CService ^^ avec propriétés, méthodes, etc
Afficher les 35 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.