【问题标题】:How to check if command prompt is open using VB Script?如何使用 VB 脚本检查命令提示符是否打开?
【发布时间】:2015-02-06 16:58:55
【问题描述】:

如何使用 VB 脚本检查命令提示符/窗口是否打开?

我正在使用 Visual Studio 2010 - 安装项目,我希望我的 VB 脚本检查命令行是否关闭,当它关闭时,它会引发错误并终止整个安装。

【问题讨论】:

  • 你的意思是用VBscript还是VB.net(Visual Studio)?

标签: visual-studio-2010 command-line vbscript window


【解决方案1】:
class Win32_ProcessStartTrace : Win32_ProcessTrace
{
  uint4 PageDirectoryBase;
  string ParentProcessName;
  uint32 ProcessID;
  string ProcessName;
  uint8 SECURITY_DESCRIPTOR[];
  uint32 SessionID;
  uint8 Sid[];
  uint8 TIME_CREATED;
};

此监视器启动和停止。以上属性仅从开始,并且与以下对象具有相同的属性。还有一个停止对象。我的代码只能做一个事件,有一个可以做多个事件的替代方案,但你必须设置事件处理程序。

Set WshShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set objEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM Win32_ProcessTrace")

Do
    Set objReceivedEvent = objEvents.NextEvent
    msgbox objReceivedEvent.ProcessName
Loop

您可以从 Process 类中获取额外信息。

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")

For Each objItem in colItems
    'Get process id you want from other script
    If obj.ProcessID = 1004 Then
        msgbox objItem.ProcessID & " " & FormatDateTime(CDate(objItem.CreationDate))
    EndIf
Next

这些是它的属性。它也有方法。

class Win32_Process : CIM_Process
{
  string Caption;
  string CommandLine;
  string CreationClassName;
  datetime CreationDate;
  string CSCreationClassName;
  string CSName;
  string Description;
  string ExecutablePath;
  uint16 ExecutionState;
  string Handle;
  uint32 HandleCount;
  datetime InstallDate;
  uint64 KernelModeTime;
  uint32 MaximumWorkingSetSize;
  uint32 MinimumWorkingSetSize;
  string Name;
  string OSCreationClassName;
  string OSName;
  uint64 OtherOperationCount;
  uint64 OtherTransferCount;
  uint32 PageFaults;
  uint32 PageFileUsage;
  uint32 ParentProcessId;
  uint32 PeakPageFileUsage;
  uint64 PeakVirtualSize;
  uint32 PeakWorkingSetSize;
  uint32 Priority;
  uint64 PrivatePageCount;
  uint32 ProcessId;
  uint32 QuotaNonPagedPoolUsage;
  uint32 QuotaPagedPoolUsage;
  uint32 QuotaPeakNonPagedPoolUsage;
  uint32 QuotaPeakPagedPoolUsage;
  uint64 ReadOperationCount;
  uint64 ReadTransferCount;
  uint32 SessionId;
  string Status;
  datetime TerminationDate;
  uint32 ThreadCount;
  uint64 UserModeTime;
  uint64 VirtualSize;
  string WindowsVersion;
  uint64 WorkingSetSize;
  uint64 WriteOperationCount;
  uint64 WriteTransferCount;
};

Help 中的示例脚本展示了如何处理多个事件处理程序。

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & _
    strComputer & "\root\CIMV2") 
Set EventSink = WScript.CreateObject( _
    "WbemScripting.SWbemSink","SINK_")

objWMIservice.ExecNotificationQueryAsync EventSink, _
    "SELECT * FROM Win32_ProcessTrace WITHIN 10"
WScript.Echo "Waiting for events..."

i = 0
While (True)
    Wscript.Sleep(1000)
Wend

Sub SINK_OnObjectReady(objObject, objAsyncContext)
    Wscript.Echo "Win32_ProcessTrace event has occurred."
    i = i+1
    If i = 3 Then WScript.Quit 0 
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2011-03-27
    • 2021-04-07
    • 2017-03-29
    • 2020-08-18
    相关资源
    最近更新 更多