OVH Cloud OVH Cloud

Liste des services sous WinXP

6 réponses
Avatar
HD
Bonjour,

En VBA, comment peut on afficher les services qui tournent sur un poste sous
Windows XP?

Merci d'avance pour votre aide.
--
@+
HD

6 réponses

Avatar
isabelle
bonjour HD,

voici un code donné ici par Frédéric

Bonsoir,

Avec votre aide, le code a été testé sur un nombre de versions de
Windows très
significatif, il devrait donc renvoyer un résultat correct dans tous les
cas.
Merci à tous.
(Code final sous ma signature)

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

'================================ 'infos sur l'OS utilisé (version, type, etc.)

Public Declare Function GetWinVersion Lib "kernel32" Alias
"GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long
Public Declare Function GetWinVersionEx Lib "kernel32" Alias
"GetVersionExA" _
(lpVersionInformation As OSVERSIONINFOEX) As Long

'Déclaration des constantes
Const VER_SUITE_SMALLBUSINESS = &H1
Const VER_SUITE_ENTERPRISE = &H2
Const VER_SUITE_BACKOFFICE = &H4
Const VER_SUITE_BLADE = &H400
Const VER_SUITE_COMMUNICATIONS = &H8
Const VER_SUITE_TERMINAL = &H10
Const VER_SUITE_SMALLBUSINESS_RESTRICTED = &H20
Const VER_SUITE_EMBEDDEDNT = &H40
Const VER_SUITE_DATACENTER = &H80
Const VER_SUITE_SINGLEUSERTS = &H100
Const VER_SUITE_PERSONAL = &H200

Const VER_NT_WORKSTATION = &H1
Const VER_NT_DOMAIN_CONTROLLER = &H2
Const VER_NT_SERVER = &H3

Public Const VER_PLATFORM_WIN32s = 0
Public Const VER_PLATFORM_WIN32_WINDOWS = 1
Public Const VER_PLATFORM_WIN32_NT = 2

'Structure pour les versions WinDOS
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 'sous type de certaines versions
End Type

'Structure pour les versions WinNT
Public Type OSVERSIONINFOEX
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 'sous type ou info sur service pack
installé
wServicePackMajor As Integer
wServicePackMinor As Integer
wSuiteMask As Integer
wProductType As Byte
wRest As Byte
End Type


Public Sub GetWindowsVersion()
Dim oviWinNT As OSVERSIONINFOEX
Dim oviWin32 As OSVERSIONINFO
Dim strVer As String
Dim OS As String
Dim OSType As String
Dim NumeroVersion As String
Dim Detail As String
Dim Msg$, SP$

oviWin32.dwOSVersionInfoSize = Len(oviWin32)
GetWinVersion oviWin32
Detail = Mid(oviWin32.szCSDVersion, 2, 1)

Select Case oviWin32.dwPlatformId

Case VER_PLATFORM_WIN32_WINDOWS

If oviWin32.dwMajorVersion = 4 And oviWin32.dwMinorVersion = 0
Then
OS = "Windows 95"
If Detail = "A" Then
OS = OS & " OSR1"
ElseIf Detail = "B" Then
OS = OS & " OSR2"
End If
ElseIf oviWin32.dwMajorVersion = 4 And oviWin32.dwMinorVersion = 3
Then
OS = "Windows 95 OSR2"
If Detail = "B" Then
OS = OS & ".1"
ElseIf Detail = "C" Then
OS = OS & ".5"
End If
ElseIf oviWin32.dwMajorVersion = 4 And oviWin32.dwMinorVersion 10 Then
OS = "Windows 98"
If Detail = "A" Then OS = OS & " SE (Seconde Édition)"
ElseIf oviWin32.dwMajorVersion = 4 And oviWin32.dwMinorVersion 90 Then
OS = "Windows ME (Millenium Édition)"
End If
NumeroVersion = "[" & oviWin32.dwMajorVersion & "." _
& oviWin32.dwMinorVersion & _
IIf(Asc(Detail) = 0, "", "." & Detail) & "]"

Case VER_PLATFORM_WIN32_NT

oviWinNT.dwOSVersionInfoSize = Len(oviWinNT)
GetWinVersionEx oviWinNT

If oviWinNT.dwMajorVersion = 3 And oviWinNT.dwMinorVersion = 0
Then
OS = "Windows NT 3.0"
ElseIf oviWinNT.dwMajorVersion = 3 And oviWinNT.dwMinorVersion = 1
Then
OS = "Windows NT 3.1"
ElseIf oviWinNT.dwMajorVersion = 3 And oviWinNT.dwMinorVersion 51 Then
OS = "Windows NT 3.51"
ElseIf oviWinNT.dwMajorVersion = 4 Then
OS = "Windows NT 4.0"
ElseIf oviWinNT.dwMajorVersion = 5 And oviWinNT.dwMinorVersion = 0
Then
OS = "Windows 2000"
ElseIf oviWinNT.dwMajorVersion = 5 And oviWinNT.dwMinorVersion = 1
Then
OS = "Windows XP"
ElseIf oviWinNT.dwMajorVersion = 5 And oviWinNT.dwMinorVersion = 2
Then
OS = "Windows 2003 Serveur"
End If

'De quel type est le produit NT/2000/XP/2003 ?
Select Case oviWinNT.wProductType
Case VER_NT_WORKSTATION
If oviWinNT.dwMajorVersion < 5 Then
OSType = "Station de travail"
Else
If oviWinNT.wSuiteMask And VER_SUITE_PERSONAL Then
OSType = "Édition familiale"
Else
OSType = "Professionnel"
End If
End If
Case VER_NT_DOMAIN_CONTROLLER
OSType = "Serveur (Contrôleur de domaine)"
Case VER_NT_SERVER
If oviWinNT.wSuiteMask And VER_SUITE_DATACENTER Then
OSType = "Serveur (Centre de données)"
ElseIf oviWinNT.wSuiteMask And VER_SUITE_ENTERPRISE Then
If oviWinNT.dwMajorVersion = 5 And oviWinNT.dwMinorVersion 0 Then
OSType = "Serveur avancé"
Else
OSType = "Edition Entreprise"
End If
ElseIf oviWinNT.wSuiteMask And VER_SUITE_BLADE Then
OSType = "Édition Web"
Else
OSType = "Serveur"
End If
End Select

NumeroVersion = "[" & oviWinNT.dwMajorVersion & "." _
& oviWinNT.dwMinorVersion & "." _
& oviWinNT.dwBuildNumber & "]"

If oviWinNT.wServicePackMajor >= 1 Then
SP = "Service Pack : " & oviWinNT.wServicePackMajor & "." & _
oviWinNT.wServicePackMinor
Else
SP = "Service Pack : " & "Aucun Service Pack installé"
End If

End Select

Msg = "Système : " & OS & " " & OSType & vbLf
Msg = Msg & "Numéro version : " & NumeroVersion & vbLf
Msg = Msg & SP

MsgBox Msg

End Sub 'fs

isabelle




Bonjour,

En VBA, comment peut on afficher les services qui tournent sur un poste sous
Windows XP?

Merci d'avance pour votre aide.
--
@+
HD


Avatar
Frédéric Sigonneau
Bonjour,

Un script tiré du Technet Script Center
(http://www.microsoft.com/technet/scriptcenter) et adapté en VBA (renvoie les
services actifs dans une feuille de calcul d'un nouveau classeur) :

'================== Sub testServices()

Set objIdDictionary = CreateObject("Scripting.Dictionary")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")
Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where State <> 'Stopped'")
For Each objService In colServices
If objIdDictionary.Exists(objService.ProcessID) Then
Else
objIdDictionary.Add objService.ProcessID, objService.ProcessID
End If
Next
Workbooks.Add
colProcessIDs = objIdDictionary.Items
For i = 0 To objIdDictionary.Count - 1
Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where ProcessID = '" & _
colProcessIDs(i) & "'")
For Each objService In colServices
j = j + 1
Cells(j, "A").Value = "Service : " & objService.DisplayName
Next
Next

End Sub
'==================
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

En VBA, comment peut on afficher les services qui tournent sur un poste sous
Windows XP?

Merci d'avance pour votre aide.
--
@+
HD


Avatar
isabelle
oup's désolé j'avais confondu avec service pack.

isabelle


Bonjour,

Un script tiré du Technet Script Center
(http://www.microsoft.com/technet/scriptcenter) et adapté en VBA (renvoie les
services actifs dans une feuille de calcul d'un nouveau classeur) :

'================== > Sub testServices()

Set objIdDictionary = CreateObject("Scripting.Dictionary")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")
Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where State <> 'Stopped'")
For Each objService In colServices
If objIdDictionary.Exists(objService.ProcessID) Then
Else
objIdDictionary.Add objService.ProcessID, objService.ProcessID
End If
Next
Workbooks.Add
colProcessIDs = objIdDictionary.Items
For i = 0 To objIdDictionary.Count - 1
Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where ProcessID = '" & _
colProcessIDs(i) & "'")
For Each objService In colServices
j = j + 1
Cells(j, "A").Value = "Service : " & objService.DisplayName
Next
Next

End Sub
'================== >
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

En VBA, comment peut on afficher les services qui tournent sur un poste sous
Windows XP?

Merci d'avance pour votre aide.
--
@+
HD




Avatar
modeste
Salut Fred !!! (*)
Ma curiosité est éveillée par les résultats de ce script.

quelle en est l'utilité ? au niveau des macros EXCEL,
exemples d'utilisation ???
Question ouverte....
;-)))
@+
(*) CTP
-----Message d'origine-----
Bonjour,

Un script tiré du Technet Script Center
(http://www.microsoft.com/technet/scriptcenter) et adapté
en VBA (renvoie les

services actifs dans une feuille de calcul d'un nouveau
classeur) :


'===================
Sub testServices()

Set objIdDictionary = CreateObject
("Scripting.Dictionary")

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer
& "rootcimv2")

Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where State
<> 'Stopped'")

For Each objService In colServices
If objIdDictionary.Exists(objService.ProcessID) Then
Else
objIdDictionary.Add objService.ProcessID,
objService.ProcessID

End If
Next
Workbooks.Add
colProcessIDs = objIdDictionary.Items
For i = 0 To objIdDictionary.Count - 1
Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where ProcessID
= '" & _

colProcessIDs(i) & "'")
For Each objService In colServices
j = j + 1
Cells(j, "A").Value = "Service : " &
objService.DisplayName

Next
Next

End Sub
'===================

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

En VBA, comment peut on afficher les services qui
tournent sur un poste sous


Windows XP?

Merci d'avance pour votre aide.
--
@+
HD


.




Avatar
Frédéric Sigonneau
Bonjour modeste,

Il faudrait demander à HD ce qu'il compte en faire (si c'est bien la réponse à
sa question).
Je suppose qu'on peut vouloir s'assurer qu'un service (par exemple le
planificateur de tâches) est bien actif avant de l'utiliser (par exemple, pour
programmer l'enregistrement ou le déclenchement d'une tâche planifiée). Ou pour
l'arrêter s'il ne devrait pas être actif ou le lancer s'il le devrait (toutes
actions programmables avec le WMI, Windows Management Instrumentation).
Ce WMI (conçu pour Windows 2000/XP/2003 semble-t-il mais utilisable aussi, sous
condition, avec Windows 98 et NT) permet d'exécuter des scripts pour manipuler
tout un tas de choses sur un PC. Ça vaut le coup de télécharger
script_center_repository.exe (à l'adresse fournie ce matin) pour avoir une idée
de ses possibilités. Les scripts fournis sont généralement très faciles à
réutiliser en VBA.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Salut Fred !!! (*)
Ma curiosité est éveillée par les résultats de ce script.

quelle en est l'utilité ? au niveau des macros EXCEL,
exemples d'utilisation ???
Question ouverte....
;-)))
@+
(*) CTP
-----Message d'origine-----
Bonjour,

Un script tiré du Technet Script Center
(http://www.microsoft.com/technet/scriptcenter) et adapté
en VBA (renvoie les

services actifs dans une feuille de calcul d'un nouveau
classeur) :


'================== > >Sub testServices()

Set objIdDictionary = CreateObject
("Scripting.Dictionary")

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer
& "rootcimv2")

Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where State
<> 'Stopped'")

For Each objService In colServices
If objIdDictionary.Exists(objService.ProcessID) Then
Else
objIdDictionary.Add objService.ProcessID,
objService.ProcessID

End If
Next
Workbooks.Add
colProcessIDs = objIdDictionary.Items
For i = 0 To objIdDictionary.Count - 1
Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where ProcessID
= '" & _

colProcessIDs(i) & "'")
For Each objService In colServices
j = j + 1
Cells(j, "A").Value = "Service : " &
objService.DisplayName

Next
Next

End Sub
'================== > >
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

En VBA, comment peut on afficher les services qui
tournent sur un poste sous


Windows XP?

Merci d'avance pour votre aide.
--
@+
HD


.






Avatar
HD
Il faudrait demander à HD ce qu'il compte en faire


Je ne réponderais pas à la Coluche "C'était juste pour faire avancer le
schmilblick"... ;)

En fait, je m'intéresse à la sécu et à la détection de virus. Un virus ou un
troyen sur XP pourrait (tout dépend du virus) se signaler par un service
inconnu qui tournerait sur le Pc. Avec un script recherchant les services
inconnu ont peut avoir un indicateur utile.

J'ai déja un script pour les Win95 et 98, qui cherche dans tout les fichiers
de démarrage + la base de registre tout programme suspect... Les programmes
répertoriés apparaissent en vert, les inconnus en orange et les virus connus
sont en rouge. Il y'a également d'autres contrôles sur les ports ouverts
(netstat -an), la taille de certains fichiers (Winsock.dll, Wsock32.dll,
etc...) qui peuvent contenir des virus, la mémoire utilisés et les
programmes qui y sont chargés, etc...

Tout un tas de contrôle que l'on peut réaliser à la main mais qui sont
rapide en VBA.

--
@+
HD