能否用VBA动态挂起/恢复Java进程?NFC工具启停优化需求
优化NFC读卡器工具的进程控制逻辑
背景与当前实现
我维护的Excel工作表包含多列数据,其中第一列依赖用户扫描NFC标签填充MemberId——数据由一款支持ACR122u-A9读卡器的商用外部工具自动复制到活动单元格。为避免后台员工在其他列录入关联数据时,NFC扫描数据误填入非目标列,目前通过Excel的Worksheet_SelectionChange事件实现以下逻辑:
- 选中第一列时,调用自定义函数
Exec_TaskStartByName启动外部工具 - 切换至其他列时,调用
Exec_TaskKillByName终止工具进程
但该外部工具基于Java框架运行,实际终止的是java.exe进程。当前方案虽能实现需求,但每次重启工具耗时过长,存在明显的“等待就绪空档期”。
核心疑问
- 能否通过VBA实现动态挂起/恢复已启动的进程,替代反复启停的方式来缩短等待时间?
- 若挂起/恢复不可行,有没有比现有方式更快启动该外部程序的方法?
现有代码说明
注: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
相关产品推荐
相关产品推荐

