You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用VBA动态挂起/恢复Java进程?NFC工具启停优化需求

优化NFC读卡器工具的进程控制逻辑

背景与当前实现

我维护的Excel工作表包含多列数据,其中第一列依赖用户扫描NFC标签填充MemberId——数据由一款支持ACR122u-A9读卡器的商用外部工具自动复制到活动单元格。为避免后台员工在其他列录入关联数据时,NFC扫描数据误填入非目标列,目前通过Excel的Worksheet_SelectionChange事件实现以下逻辑:

  • 选中第一列时,调用自定义函数Exec_TaskStartByName启动外部工具
  • 切换至其他列时,调用Exec_TaskKillByName终止工具进程

但该外部工具基于Java框架运行,实际终止的是java.exe进程。当前方案虽能实现需求,但每次重启工具耗时过长,存在明显的“等待就绪空档期”。

核心疑问

  1. 能否通过VBA实现动态挂起/恢复已启动的进程,替代反复启停的方式来缩短等待时间?
  2. 若挂起/恢复不可行,有没有比现有方式更快启动该外部程序的方法?

现有代码说明

注:Exec_TaskStartByName中必须先执行ChDir切换到工具目录,否则程序无法启动,相关代码如下:

Function Exec_TaskStartByName( _
    ByVal argFilePath As String, _
    ByVal argFileName As String, _
    ByRef argTaskId As Long)
      
    '切换到程序所在目录后启动
    ChDir (argFilePath)
    argTaskId = Shell(argFilePath & argFileName, vbMinimizedFocus)
    
    Exec_TaskStartByName = (argTaskId > 0)
    
End Function

Function Exec_TaskKillByName( _
    ByVal argFileName As String)

    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

内容的提问来源于stack exchange,提问作者user26618353

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:02:46