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
ます。