Я реализовал это с помощью события Excel ProcessSelectionChange: в первом столбце запустите внешнее приложение с помощью процедуры Exec_TaskStartByName (см. ниже) и при переключении на другой столбец уничтожьте его с помощью подпрограммы Exec_TaskKillByName (фактически убейте Java.exe).
Таким образом, описанное выше работает, но каждый раз перезапуск приложения занимает слишком много времени. время, что приводит к «мертвому времени» (инструмент еще не готов). Вместо того, чтобы каждый раз запускать/завершать приложение, мне интересно, можно ли перевести запущенный процесс в состояние «OnHold» (временная остановка выполнения), чтобы его не нужно было перезапускать каждый раз. Ожидается, что отключение/включение займет меньше времени, чем уничтожение/запуск.
- Если нет, то существуют ли более быстрые способы запуска внешней программы, чем я использую (см. код ниже)?
Код: Выделить всё
Function Exec_TaskStartByName( _
ByVal argFilePath As String, _
ByVal argFileName As String, _
ByRef argTaskId As Long)
'First switch to the appropriate directory before starting the command
ChDir (argFilePath)
argTaskId = Shell(argFilePath & argFileName, vbMinimizedFocus)
Exec_TaskStartByName = (argTaskId > 0)
End Function
Function Exec_TaskKillByName( _
ByVal argFileName)
Dim oServ As Object
Dim cProc As Variant
Dim oProc As Object
Set oServ = GetObject("winmgmts:")
Set cProc = oServ.ExecQuery("Select * from Win32_Process")
For Each oProc In cProc
If (oProc.Name = argFileName) Then
Exec_TaskKillByName = oProc.Terminate
Exit For
End If
Next
End Function
Подробнее здесь: https://stackoverflow.com/questions/788 ... and-re-ena
Мобильная версия