我在 C++ 程序中使用 CreateProcess 调用来执行运行 Java Swing GUI 应用程序的 JAR 文件。一切正常,除了 Java 应用程序开始最小化并且我希望它从显示的窗口开始。这是相关的代码片段:
// 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。