引用microsoft wmi scripting v1.2 library Public Locator As SWbemLocator Public services As SWbemServices Public Item As ListItem Dim WithEvents eventSink As SWbemSink
Public Sub InitialiseView() ListView1.ListItems.Clear ListView1.ColumnHeaders.Add , , "服务名", 1000 ListView1.ColumnHeaders.Add , , "详细信息", 4000 ListView1.ColumnHeaders.Add , , "状态", 1000 End SubPrivate Sub CmdConnect_Click() LoadView End SubPrivate Sub CmdStart_Click() Dim ServiceObject As SWbemObject Dim ServiceName
On Error Resume Next ServiceName = ListView1.SelectedItem.Text If Err.Number = 0 Then Set ServiceObject = services.Get("Win32_Service='" & ServiceName & "'") ServiceObject.StartService End If End SubPrivate Sub CmdStop_Click() Dim ServiceObject As SWbemObject Dim ServiceName
On Error Resume Next ServiceName = ListView1.SelectedItem.Text If Err.Number = 0 Then
Set ServiceObject = services.Get("Win32_Service='" & ServiceName & "'") ServiceObject.StopService End If End SubPrivate Sub text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Call CmdConnect_Click DoEvents End IfEnd SubPublic Sub LoadView() Dim Enumerator As SWbemObjectSet Dim Object As SWbemObject Dim Item As ListItem
Set services = Locator.ConnectServer(Text1.Text) services.ExecNotificationQueryAsync eventSink, "Select * from __InstanceModificationEvent Within 2.0 Where TargetInstance Isa 'Win32_Service'" Set Enumerator = services.ExecQuery("Select * From Win32_Service")
Form1.Enabled = True Form1.MousePointer = SavePointer End SubPrivate Sub Form_Load() Set Locator = New SWbemLocator Set eventSink = New SWbemSink InitialiseView End Sub
只要有足够的权限!~
Public Locator As SWbemLocator
Public services As SWbemServices
Public Item As ListItem
Dim WithEvents eventSink As SWbemSink
Public Sub InitialiseView()
ListView1.ListItems.Clear
ListView1.ColumnHeaders.Add , , "服务名", 1000
ListView1.ColumnHeaders.Add , , "详细信息", 4000
ListView1.ColumnHeaders.Add , , "状态", 1000
End SubPrivate Sub CmdConnect_Click()
LoadView
End SubPrivate Sub CmdStart_Click()
Dim ServiceObject As SWbemObject
Dim ServiceName
On Error Resume Next
ServiceName = ListView1.SelectedItem.Text
If Err.Number = 0 Then
Set ServiceObject = services.Get("Win32_Service='" & ServiceName & "'")
ServiceObject.StartService
End If
End SubPrivate Sub CmdStop_Click()
Dim ServiceObject As SWbemObject
Dim ServiceName
On Error Resume Next
ServiceName = ListView1.SelectedItem.Text
If Err.Number = 0 Then
Set ServiceObject = services.Get("Win32_Service='" & ServiceName & "'")
ServiceObject.StopService
End If
End SubPrivate Sub text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
Call CmdConnect_Click
DoEvents
End IfEnd SubPublic Sub LoadView()
Dim Enumerator As SWbemObjectSet
Dim Object As SWbemObject
Dim Item As ListItem
On Error Resume Next
SavePointer = Form1.MousePointer
Form1.MousePointer = vbHourglass
Form1.Enabled = False
ListView1.ListItems.Clear
eventSink.Cancel
Set services = Locator.ConnectServer(Text1.Text)
services.ExecNotificationQueryAsync eventSink, "Select * from __InstanceModificationEvent Within 2.0 Where TargetInstance Isa 'Win32_Service'"
Set Enumerator = services.ExecQuery("Select * From Win32_Service")
For Each Object In Enumerator
Set Item = ListView1.ListItems.Add(, Object.Name, Object.Name)
Item.SubItems(1) = Object.Description
Item.SubItems(2) = Object.State
Next
Form1.Enabled = True
Form1.MousePointer = SavePointer
End SubPrivate Sub Form_Load()
Set Locator = New SWbemLocator
Set eventSink = New SWbemSink
InitialiseView
End Sub