0

VBScript を使用して、可視ウィンドウを持つプロセスが開いているかどうかを判断する方法が必要です。

たとえば、SolidWorksウィンドウを閉じても、SolidWorks.exeプロセスは実行中のままです。

どちらがどれであるかをどうやって調べることができますか? 助言がありますか?

4

1 に答える 1

1

コマンド ライン プログラム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列のインデックスは次のとおりです。

  • 0:「画像名」
  • 1: "PID",
  • 2: 「セッション名」
  • 3: 「セッション番号」
  • 4: "メモリ使用量",
  • 5:「ステータス」
  • 6:「ユーザー名」
  • 7:「CPU時間」
  • 8:「ウィンドウタイトル」

プロセスとのより高度な対話は、WMI を通じて利用できます。VBScript でそれを使用する方法の例は、インターネット上にたくさんあります。を検索しWin32_Processます。

于 2014-12-12T13:46:48.410 に答える