Могу ли я динамически приостановить приложение (процесс 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 как долго)

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

' First switch to the appropriate directory before starting the command
ChDir (argFilePath)
argTaskId = Shell(argFilePath & argFileName, vbMinimizedFocus)

Exec_TaskStartByName = (argTaskId > 0)
Конечная функция
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
Функция завершения
См. описание, запуск/завершение приложения с помощью предоставленного кода работает, но запуск занимает слишком много времени

Подробнее здесь: https://stackoverflow.com/questions/788 ... and-re-ena
Ответить

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

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

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

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

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