Мне нужен способ определить, открыт ли процесс с видимым окном, используя VBScript.
Например, когда я закрываю окно SolidWorks, процесс SolidWorks.exe
продолжает работать.
Как узнать, что есть что? Какие-либо предложения?
Мне нужен способ определить, открыт ли процесс с видимым окном, используя VBScript.
Например, когда я закрываю окно 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, можно найти в Интернете. Найдите Win32_Process
.
IsWindowVisible
, но у меня такое чувство, что этот ответ не то, что вы искали. - person Tomalak   schedule 11.12.2014