【问题标题】:Launch Application in a minimized state from Java从 Java 以最小化状态启动应用程序
【发布时间】:2009-03-25 21:00:59
【问题描述】:

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

start-program-if-not-already-running-in-java

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

是否有在 Java 代码中启动应用程序(Windows 中的 .exe,而不是 Java 应用程序)并开始最小化?或者也许在开始后立即将其最小化?这将解决另一个问题的焦点问题,并且已经运行的问题或多或少会自行解决。

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

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

【问题讨论】:

    标签: java windows


    【解决方案1】:

    仅限 Windows:

    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 /?
    

    【讨论】:

    • 不错。我从没想过要检查 start 的选项。
    • 这看起来很完美,但是从 Java 应用程序运行时,它显示“无法运行程序”cmd.exe /C START /MIN C:\path_to_app\app.exe”:CreateProcess error=2,系统找不到指定的文件。如果我复制该行并将其粘贴到 cmd 窗口中,它可以正常工作。
    • 嗯...可能是因为我尝试使用 ProcessBuilder 而不是 Runtime...这有关系吗?
    【解决方案2】:

    我对 Java 的细节不是很熟悉,但是根据我刚刚查看的一个网站,如果您使用的是 java.awt.Frame(其中包括来自 Swing 的 JFrame),您应该使用该功能 off那个称为 setState 的框架,它接受 Frame.ICONIFIED 和 Frame.NORMAL 作为参数(图标化将是最小化状态)。

    How do I minimize a Java application window?

    【讨论】:

    • 正如我上面提到的,我正在启动的应用程序是一个常规的 .exe,而不是一个 Java 应用程序,我相信这是可以工作的。
    • 糟糕。错过了那部分(也显示了我对 Java 的了解程度)。
    • 据我所知,查看 Runtime.getRunTime() 似乎没有一种方法可以从 Java 启动进程并执行除向其传递参数之外的任何操作。如果 exe 有一个参数表示“最小化我”,这将起作用。否则,我就没主意了。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2013-12-31
      相关资源
      最近更新 更多