我在C++程序内使用CreateProcess调用来执行运行Java Swing GUI应用程序的JAR文件。所有的工作都很好,除了Java应用程序的启动最小化之外,我希望它以显示的窗口开始。下面是相关的代码片段:用于运行JAR文件的CreateProcess最小化窗口开始
// Construct the command string to be used for the CreateProcess call,
//including a parameter string
sprintf(cmdStr, "javaw -jar \"AppDir\\App.jar\" %s", parmStr);
// Create and initialized startup-info structure for use with CreateProcess call
STARTUPINFO startInfo;
ZeroMemory(&startInfo, sizeof(startInfo));
startInfo.wShowWindow = SW_NORMAL;
startInfo.dwFlags = STARTF_USESHOWWINDOW;
startInfo.cb = sizeof(startInfo);
PROCESS_INFORMATION procInfo;
ZeroMemory(&procInfo, sizeof(procInfo));
if (!CreateProcess(NULL, cmdStr, NULL, NULL, FALSE, 0, NULL, NULL, &startInfo, &procInfo))
{
MessageBox(dialogOwner, "Create Process Error", "Application not instantiated", MB_OK);
}
根据MSDN的文学,设置wShowWindow标志SW_NORMAL和dwFlags中到STARTF_USESHOWWINDOW应该做的伎俩,但有些我已经在这个阅读的意见和其他论坛暗示有时候这些标志会被忽略(例如,用于控制台应用程序),所以我想知道这是否是这种情况。为了记录,在这之前,我已经遇到了这个问题,然后它自行消失了,现在我修改了一些代码后又回来了。但是我之前没有在startupinfo结构中设置任何标志,所以我希望通过这样做来实现行为的一致性。任何提示或指针,将不胜感激......
谢尔顿R.
您是使用AWT还是Swing来显示窗口?如果是这样,'JFrame#setState()'是你正在寻找的。 – 2012-02-13 17:48:47
我还没有试过你的建议,Jim,因为我一直在C++方面玩耍。我所看到的是,如果在执行CreateProcess调用之前添加一个MessageBoxA调用来显示一些调试信息,那么该窗口就会很好,而不是被最小化。在C++世界中有没有一种方法可以驱除机器中的这个鬼魂? – 2012-02-13 20:17:12
更新:我编辑我的问题,包括显示CreateProcess调用的代码,以及我将startupinfo.cb设置为该结构的大小的语句,因为我在读取另一个重要的问题的评论中。此外,我发现使用命令“java”而不是“javaw”(显示控制台输出的命令窗口)也会导致显示应用程序窗口而不是最小化。有关我的代码的C++部分可能会丢失什么的想法? – 2012-02-13 21:39:15