【发布时间】:2016-02-11 02:48:17
【问题描述】:
我最近遇到了如下代码:
Process proc1 = Runtime.getRuntime().exec("C:\\Program Files (x86)\\...");
这很好用。然而,一个有趣的问题。此代码实际上打开了指定进程的新实例并将其存储到对象中。如果该进程已经运行并将其存储到对象,则它不会以该进程为目标。我猜这就是 .exec() 函数调用。如何在不打开新实例的情况下定位已经处于活动状态的进程并将其存储到我的 Process 对象中?
注意:我尝试了明显的答案,Process proc1 = new Process("name"); Eclipse 说无法实例化进程。我确实在 javadoc 中查找了 Runtime 类。据我所知,没有明显的方法可以实现我想要实现的目标。似乎是一个简单的问题,我敢肯定它之前被问过,但我无法在任何地方找到答案,这就是我在这里问的原因。我可能使用了错误的术语,这就是原因。
编辑: 我在 Windows 10 上
我的目标是将游戏 Minecraft 的进程附加到 Process 对象。然后,我想使用robot.keyPress(KeyEvent.VK_W); 将我的角色向前移动。我不能只打开进程 minecraft,因为所有要做的就是打开启动器 minecraft.exe,然后我会在“欢迎”屏幕上。
【问题讨论】:
-
您只能附加到您创建的进程。该进程必须是当前进程的子进程。您可以使用
/proc访问 Linux 上的进程,但它是特定于平台的。 -
你想用这个过程做什么?
-
@PeterLawrey 我在 MS Windows 上。抱歉忘了提,我在问题正文中添加了这一点。如何在 Windows 中创建它?
-
据我了解,如果进程已经在运行,您不想实例化它。但是您想将正在运行的进程捕获到一个 java Process 对象中对吧?您当然可以使用 tasklist.exe 以编程方式识别正在运行的进程,然后停止该进程(我不知道这是否真的是您想要的?)然后实例化一个新进程。
-
@nlloyd 只是为了学习而玩耍。 ATM,我试图通过打开进程并使用 Robot.keypress() 来让我的 Minecraft 角色前进。