Могу ли я динамически приостановить приложение (процесс Java) с помощью VBA и снова включить его?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Могу ли я динамически приостановить приложение (процесс Java) с помощью VBA и снова включить его?

Сообщение Anonymous »

У меня есть лист Excel с несколькими столбцами данных. Данные первого столбца заполняются пользователями, сканируя NFC-тег, содержимое (MemberId) копируется в активную ячейку с помощью внешнего инструмента, который считывает данные со считывателя NFC (ACR122u-A9) и помещает их в активную. клетка. Однако при вводе данных в другие ячейки (сотрудником стола) я хочу временно заблокировать ввод NFC. При запуске внешнего приложения я замечаю, что оно запускает Java.
Я реализовал это с помощью события Excel ProcessSelectionChange: в первом столбце запустите внешнее приложение с помощью процедуры Exec_TaskStartByName (см. ниже) и при переключении на другой столбец уничтожьте его с помощью подпрограммы Exec_TaskKillByName (фактически убейте Java.exe).
Таким образом, описанное выше работает, но каждый раз перезапуск приложения занимает слишком много времени. время, что приводит к «мертвому времени» (инструмент еще не готов). Вместо того, чтобы каждый раз запускать/завершать приложение, мне интересно, можно ли перевести запущенный процесс в состояние «OnHold» (временная остановка выполнения), чтобы его не нужно было перезапускать каждый раз. Ожидается, что отключение/включение займет меньше времени, чем уничтожение/запуск.
  • Если нет, то существуют ли более быстрые способы запуска внешней программы, чем я использую (см. код ниже)?
Я заметил, что если я сначала не выполню ChDir в процедуре Exec_TaskStartByName, приложение не запустится.

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»