Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行JAR文件的CreateProcess以最小化窗口开始 < >我在C++程序中使用CuraPATE调用来执行运行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); }_Java_C++_Jar_Createprocess_Showwindow - Fatal编程技术网

运行JAR文件的CreateProcess以最小化窗口开始 < >我在C++程序中使用CuraPATE调用来执行运行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); }

运行JAR文件的CreateProcess以最小化窗口开始 < >我在C++程序中使用CuraPATE调用来执行运行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); },java,c++,jar,createprocess,showwindow,Java,C++,Jar,Createprocess,Showwindow,根据MSDN文献,将wShowWindow标志设置为SW_NORMAL,将dwFlags设置为STARTF_USESHOWWINDOW应该可以做到这一点,但我在本论坛和其他论坛中读到的一些评论暗示,有时这些标志会被忽略(例如,对于控制台应用程序),因此我想知道这里是否存在这种情况。为了记录在案,我曾经遇到过这个问题,然后它自己消失了,现在在我做了一些代码更改后又回来了。但是我以前没有在startupinfo结构中设置任何标志,所以我希望通过这样做来实现行为的一致性。任何提示或建议都将不胜感激 S

根据MSDN文献,将wShowWindow标志设置为SW_NORMAL,将dwFlags设置为STARTF_USESHOWWINDOW应该可以做到这一点,但我在本论坛和其他论坛中读到的一些评论暗示,有时这些标志会被忽略(例如,对于控制台应用程序),因此我想知道这里是否存在这种情况。为了记录在案,我曾经遇到过这个问题,然后它自己消失了,现在在我做了一些代码更改后又回来了。但是我以前没有在startupinfo结构中设置任何标志,所以我希望通过这样做来实现行为的一致性。任何提示或建议都将不胜感激


Sheldon R.

好的,我一直在研究解决问题的方法,我终于准备好讨论它了,因为它似乎起作用了:)我调用Java应用程序有两种方式之一:首先弹出对话框收集登录凭据,或者直接使用保存的凭据调用应用程序。对于登录对话框案例,我使用参数“javaw…”调用CreateProcess,而保存的凭证案例似乎需要“java…”以避免应用程序启动。除了参数字符串中的差异外,CreateProcess调用的所有其他内容都是相同的。我不知道为什么我会在一种情况下使用“java”,在另一种情况下使用“javaw”,但既然它起作用了,我不会质疑:)但是,当然,如果有人想在这个问题上有所启发,我很乐意了解更多。感谢@Jim Garrison的建议,即使这不是我问题的最终解决方案


< Sheldon R. >

这是对我之前的答案的更新:我必须根据上下文调用java applet两种不同的方式(即“java”或“javw”),这与C++调用中的一个bug有关,我从中调用了我的applet。我之所以知道这一点,是因为在修复我的问题几个月后,发布了此应用程序的较新版本,并且此版本没有潜在的错误,这基本上导致了我的小程序中出现了一个新的错误,因为“java”命令执行了您预期的操作,即除了小程序窗口之外,还实例化了控制台窗口,让我的业务用户大吃一惊的是:)。对于C++应用程序的新的无bug版本,我首先使用“JavaW”命令来调用applet,而不管是否先实例化对话框,以使用户能够输入登录凭据…
Sheldon

您是使用AWT还是Swing来显示窗口?如果是这样,<代码> jFraseSyStAteste()/Cuth>就是你要找的。吉姆,我还没有尝试过你的建议,因为我还在C++方面玩过。我所看到的是,如果我在执行CreateProcess调用之前添加MessageBoxA调用以显示一些调试信息,那么窗口会显示得很好,而不是最小化。是否有一种方法在C++世界中驱除这个机器中的这个鬼?更新:我编辑我的问题,包括显示CurATE进程调用的代码,还有我将StastupFo.cb设置为结构大小的语句,因为我在评论中读到了另一个重要的问题。此外,我发现使用命令“java”而不是“javaw”(它显示控制台输出的命令窗口)也会导致显示应用程序窗口,而不是最小化。关于我的代码中C++部分可能会丢失什么?更新2:我把代码添加到java应用程序中,从JFrice中获取状态,并在状态栏中显示一条消息。有两种方法可以访问启动Java应用程序的CreateProcess语句,目前,一种方法显示应用程序窗口,另一种方法将其最小化。在这两种情况下,帧状态都报告为正常。。。