为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 进程上调用 Windows10 计算器?

在 Java 进程上调用 Windows10 计算器?

九州编程 2021-09-29 14:56:26
我是一个刚开始学习基于Java的多线程编程的学生。作为我的第一个练习之一,我被告知创建一个执行 Windows 计算器的进程,然后等待该进程完成,然后发送消息。这是我所做的代码的摘录。Process p = Runtime.getRuntime().exec("calc.exe");p.waitFor();System.out.println("Process finished");当我执行它时,Windows 10 计算器打开,然后我收到“处理完成”消息。我不知道为什么在进程仍在运行时收到消息,因为计算器是打开的,所以我尝试运行完全相同的代码,但使用“notepad.exe”作为要执行的命令。这次执行的结果是预期的:直到我关闭记事本才收到消息。我尝试打开其他Windows 10默认程序,作为“explorer.exe”,有些程序按照它应该的方式工作,而其他程序则没有。我对它的工作方式的想法是“explorer.exe”或“calc.exe”像某种启动器一样工作,所以当他们收到一个执行它们的进程时,他们创建自己的进程,我无法用Java控制程序。这完全是我的猜测。在实际的问题是:为什么会发生呢?Windows 10 计算器和其他程序在进程方面如何工作?提前致谢。
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

Process#waitFor()返回int值,它实际上errorlevel是进程的退出代码(即)。


如果启动的进程返回非零errorlevel并且“正确”(即按预期)工作,否则您的代码会失败。您可以通过运行下面的批处理文件来检查它:


@echo off

calc.exe

REM explorer.exe

echo Error level: %errorlevel%

它会回报你的环境非零errorlevel输出的calc.exe和Explorer.exe的,并0为NOTEPAD.EXE。


在我的环境(Windows 7)上,calc.exe也会返回0并且您的代码片段按预期工作。


还请考虑到某些程序在成功的情况下可能会返回非零退出代码 - 这不是严格的。


基于这一点以及第一个练习不应该太复杂的事实 - 假设您的代码片段就是答案。


如果无论如何您仍然需要找到解决方案,您可以这样做(这里是批处理命令,而不是Java):

  1. 运行calc.exe

    calc.exe

  2. 查找PID的的的calc.exe进程:

    tasklist /v /fo csv | findstr /i "calc.exe"

  3. 通过运行该过程的无限检查PIDbreak;当处理不再被呈现,使用命令(假设例如PID = 1111):

    tasklist /fi "pid eq 1111"


查看完整回答
反对 回复 2021-09-29
  • 1 回答
  • 0 关注
  • 289 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信