从Java以最小化状态启动应用程序

从Java以最小化状态启动应用程序,java,windows,Java,Windows,这是我之前提出的一个后续问题: 我没有得到一个很好的解决方案(因为似乎没有),但我有一个相关的问题: 是否可以用Java代码(Windows中的.exe,而不是Java应用程序)启动应用程序并将其最小化?或者在启动后立即将其最小化?这将解决另一个问题的焦点问题,而已经运行的问题将或多或少地自行处理 再次澄清问题:Java客户端和.exe在Windows中运行,我真的没有能力编写任何包装器或使用JNI mojo或类似的东西。我或多或少需要一个纯Java解决方案 再次感谢您的帮助,我非常愿意接受一

这是我之前提出的一个后续问题:

我没有得到一个很好的解决方案(因为似乎没有),但我有一个相关的问题:

是否可以用Java代码(Windows中的.exe,而不是Java应用程序)启动应用程序并将其最小化?或者在启动后立即将其最小化?这将解决另一个问题的焦点问题,而已经运行的问题将或多或少地自行处理

再次澄清问题:Java客户端和.exe在Windows中运行,我真的没有能力编写任何包装器或使用JNI mojo或类似的东西。我或多或少需要一个纯Java解决方案


再次感谢您的帮助,我非常愿意接受一个简单的答案:“这是不可能的。”

我对Java的细节不太熟悉,但根据我刚才看到的一个网站,如果您使用的是Java.awt.Frame(包括Swing中的JFrame),您应该使用名为setState的框架函数off,该函数接受frame.ICONIFIED和frame.NORMAL作为参数(ICONIFIED将是最小化状态)


如果这些应用程序具有命令行开关,可以最小化它们的启动,那么您就可以轻松地使用它们。否则,我不能100%肯定,但我高度怀疑这是可能的。您必须有某种方式与Windows窗口管理器进行交互,Windows窗口管理器本质上是特定于平台的,因此Java不太可能包含它。总有可能有人编写了第三方库来处理此任务,但我觉得不太可能。

Windows only:

public class StartWindowMinimized {

  public static void main(String[] args) throws IOException {
    if (args.length != 1) {
      System.err
          .println("Expected: one argument; the command to launch minimized");
    }
    String cmd = "cmd.exe /C START /MIN ";
    Runtime.getRuntime().exec(cmd + args[0]);
  }

}
示例用法:

java -cp . StartWindowMinimized notepad.exe
java -cp . StartWindowMinimized cmd.exe
要理解所涉及的论点:

cmd /?
START /?

正如我前面提到的,我正在启动的应用程序是一个常规的.exe,而不是一个Java应用程序,我相信在这种情况下,它是可以工作的。错过了这一部分(同时也展示了我对Java的了解程度)。从Runtime.getRunTime()中我可以看出,似乎没有一种方法可以从Java启动一个进程,除了向它传递参数之外,还可以执行其他任何操作。如果exe有一个表示“最小化我”的参数,这将起作用。否则,我就没有主意了。很好。我从来没有想过检查start的选项。这看起来很完美,但当从Java应用程序运行时,它会显示“无法运行程序”cmd.exe/C start/MIN C:\path\u to\u app\app.exe:CreateProcess error=2,系统找不到指定的文件。如果我复制这一行并将其粘贴到cmd窗口中,效果会很好。嗯……可能是因为我尝试使用ProcessBuilder而不是运行时来执行此操作……这有关系吗?