正在检查打印假脱机程序状态(是否运行)



我需要检测打印假脱机程序服务是否正在运行。我可以找到VB的各种资源。. NET(例如,使用ServiceProcess.ServiceController实际操作服务),但VB6没有。

有什么方法可以检查打印假脱机程序是否在VB6中运行?最理想的是开始,但没有这个我也能活下去。

我们在VBA/VB6/VBScript和命令提示符中使用wmi

列出进程

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\.rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")
For Each objItem in colItems
        msgbox objitem.name & " PID=" & objItem.ProcessID & " SessionID=" & objitem.sessionid
'       objitem.terminate
Next

输入命令提示符

wmic process get 

您将看到您可以使用wmic帮助获取VBS方法/属性

wmic/?Wmic process/?Wmic进程get/?

所以wmic service get caption,status

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\.rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_Service")
For Each objItem in colItems
        msgbox objitem.name & " " & objitem.status
Next

由于只有一个Print Spooler,您可以查询单个实例的Win32_Service类。然后,检查Started属性以确定它是否已启动/运行:

Set objSpooler = GetObject("winmgmts:rootcimv2:Win32_Service.Name='Spooler'")
If objSpooler.Started Then
    MsgBox "Print Spooler is running."
Else
    MsgBox "Print Spooler is NOT running."
End If

已经发布的两个答案都很好(并且将解决问题),但我只是想回答我自己的问题,以结合其他地方给出的答案(由VBForums.com上的用户Bonnie West),因为它提供了一种额外的方法,可能对其他发现此问题的人有用:

Option Explicit 'In a standard Module
Private Sub Main()
    With CreateObject("Shell.Application")  'Or New Shell if Microsoft Shell Controls And Automation is referenced
        If .IsServiceRunning("Spooler") Then
            .ServiceStop "Spooler", False
        Else
            .ServiceStart "Spooler", False
        End If
    End With
End Sub

最新更新