如果我错了,请纠正我:您有一个应用程序启动了 2 个其他进程(您无权访问其中的源代码),并且您希望在您的应用程序结束时终止这 2 个进程?
这可以在您的应用程序启动一个额外的进程来监控您的应用程序的状态并负责关闭其他 2 个进程时完成
例如,一个粗略的监控应用程序可能存在 1 个模块:
Option Explicit
Public pstrArg() As String
Private Sub Main()
pstrArg = Split(Command, " ")
Load frmMonitor
End Sub
这个模块加载一个名为 frmMonitor 的表单,上面有一个计时器控件:
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Form_Load()
With Timer1
.Interval = 100
.Enabled = True
End With 'Timer1
End Sub
Private Sub Timer1_Timer()
Dim intIndex As Integer
If FindWindow(vbNullString, pstrArg(0)) = 0 Then
For intIndex = 1 To UBound(pstrArg)
TerminateProcess pstrArg(intIndex)
Next intIndex
End
End If
End Sub
Private Sub TerminateProcess(strName As String)
Dim Process As Object
For Each Process In GetObject("winmgmts:").ExecQuery("Select Name from Win32_Process Where Name = '" & strName & "'")
Process.Terminate
Next
End Sub
确保监控应用程序的启动函数是 sub Main 以便您可以使用命令行参数调用它
您可以按如下方式进行测试:
将监控应用程序编译成 MonitorApp.exe 并将其放置在与一个名为 frmTest 的 1 个表单的现有测试项目相同的文件夹中:
'1 form with:
' 1 timer control: name=Timer1
' 1 command button : name=Command1
Option Explicit
Private Sub Command1_Click()
Shell "calc.exe"
End Sub
Private Sub Form_Load()
Shell App.Path & "\MonitorApp.exe frmTest calc.exe"
End Sub
每次单击命令按钮时都会启动一个计算器
当您关闭表单时,monitor 应用程序将关闭所有计算器,然后自行完成