-1
我需要一種方法來確定是否使用VBScript打開具有可見窗口的進程。VBS如何確定程序是否正在運行
例如,當我關閉SolidWorks窗口時,SolidWorks.exe
進程仍在運行。
我怎樣才能找出哪個是哪個?有什麼建議麼?
我需要一種方法來確定是否使用VBScript打開具有可見窗口的進程。VBS如何確定程序是否正在運行
例如,當我關閉SolidWorks窗口時,SolidWorks.exe
進程仍在運行。
我怎樣才能找出哪個是哪個?有什麼建議麼?
也許你可以使用命令行程序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
/False
或tasklist
提供的任何其他信息。作爲參考,tasklist
列索引是:
通過WMI可以實現更高級的與進程的交互。如何在VBScript中使用它的大量示例都遍佈在Internet上。搜索Win32_Process
。
通過「程序」定義*你*的含義。因爲從操作系統的角度來看,只有進程。 – Tomalak 2014-12-05 09:39:27
通過運行我的意思是它可以最大限度地發揮作用,而無需首先運行.exe文件。但solidworks的sldworks.exe過程在啓動後第一次運行之後就會運行。關閉任何其他程序時關閉solidworks不會停止sldworks.exe進程,因此當我的VBS搜索solidworks是否打開時,它會得到肯定的結果,但是當命令發送到實體時,程序會出錯,因爲它不是真的開放..? – 2014-12-11 09:09:11
所以你需要確定一個程序是否有*可見*窗口?我不認爲用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