2014-12-05 112 views
-1

我需要一種方法來確定是否使用VBScript打開具有可見窗口的進程。VBS如何確定程序是否正在運行

例如,當我關閉SolidWorks窗口時,SolidWorks.exe進程仍在運行。

我怎樣才能找出哪個是哪個?有什麼建議麼?

+2

通過「程序」定義*你*的含義。因爲從操作系統的角度來看,只有進程。 – Tomalak 2014-12-05 09:39:27

+0

通過運行我的意思是它可以最大限度地發揮作用,而無需首先運行.exe文件。但solidworks的sldworks.exe過程在啓動後第一次運行之後就會運行。關閉任何其他程序時關閉solidworks不會停止sldworks.exe進程,因此當我的VBS搜索solidworks是否打開時,它會得到肯定的結果,但是當命令發送到實體時,程序會出錯,因爲它不是真的開放..? – 2014-12-11 09:09:11

+0

所以你需要確定一個程序是否有*可見*窗口?我不認爲用VBScript是可能的。你可以通過調用[Windows API函數'IsWindowVisible']來實現C或.NET程序(http://msdn.microsoft.com/zh-cn/library/ms633530%28v=vs.85%29.aspx ),但我有一種感覺,這個答案不是你想要的。 – Tomalak 2014-12-11 09:41:12

回答

0

也許你可以使用命令行程序tasklist.exe找出右側窗口是否打開。

如果您運行tasklist /V /FI "IMAGENAME eq sldworks.exe"並找出您感興趣的流程與另一流程的區別,則可能會有效。

假設有一個特定的窗口標題你可以看看:

Dim pid = GetProcessId("sldworks.exe", "That window title") 
If pid > 0 Then 
    MsgBox "Yay we found it" 
End If 

其中GetProcessId()是這個

Function GetProcessId(imageName, windowTitle) 
    Dim currentUser, command, output, tasklist, tasks, i, cols 

    currentUser = CreateObject("Wscript.Network").UserName 

    command = "tasklist /V /FO csv" 
    command = command & " /FI ""USERNAME eq " + currentUser + """" 
    command = command & " /FI ""IMAGENAME eq " + imageName + """" 
    command = command & " /FI ""WINDOWTITLE eq " + windowTitle + """" 
    command = command & " /FI ""SESSIONNAME eq Console""" 
    ' add more or different filters, see tasklist /? 

    output = Trim(Shell(command)) 
    tasklist = Split(output, vbNewLine) 

    ' starting at 1 skips first line (it contains the column headings only) 
    For i = 1 To UBound(tasklist) - 1 
     cols = Split(tasklist(i), """,""") 
     ' a line is expected to have 9 columns (0-8) 
     If UBound(cols) = 8 Then 
      GetProcessId = Trim(cols(1)) 
      Exit For 
     End If 
    Next 
End Function 

Function Shell(cmd) 
    Shell = WScript.CreateObject("WScript.Shell").Exec(cmd).StdOut.ReadAll() 
End Function 

您不必返回PID,你也可以返回True/Falsetasklist提供的任何其他信息。作爲參考,tasklist列索引是:

  • 0: 「圖像名」
  • 1: 「PID」,
  • 2: 「會話名稱」
  • 3: 「會話#」
  • 4: 「MEM用法」,
  • 5: 「狀態」
  • 6: 「用戶名」
  • 7: 「CPU時間」
  • 8:「窗口標題」

通過WMI可以實現更高級的與進程的交互。如何在VBScript中使用它的大量示例都遍佈在Internet上。搜索Win32_Process

相關問題