我正在写一个网络测试框架窗口,使用多个浏览器来测试网络应用程序。我希望启动的浏览器隐藏的但是它不工作。

我使用的CreateProcess开浏览器与SW_HIDE标志

STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
CreateProcess(NULL, const_cast<char*> (cmd.c_str()) , NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

它的工作的现用于互联网浏览器和其他应用程序,但未有firefox和其他浏览器。我知道这一进程能够选择是否按照通过标志。是否有任何种方式我可以迫使它开始隐藏?

我可以等到窗显示出来然后隐藏它的通过得到处理的开放的窗口。但是我在寻找更清洁的解决方案。

有帮助吗?

解决方案

问题是价值 wShowWindow 仅在功能时使用 ShowWindow 被命令称为 SW_SHOWDEFAULT, 另外,就像Fastal所说,浏览器创建了一些其他过程来执行其他任务。
基于您的想法和Fastal的答案,您可以这样做以隐藏您创建的过程创建的窗口:
1.-创建一个流程列表: CreateToolhelp32Snapshot, Process32First, Process32NextCloseHandle;仅采用您创建的过程创建的过程。 这里 是如何使用此功能的解释,它可与Windows NT之外的任何Windows版本一起使用。
2.-使用 EnumWindows 要枚举屏幕上的窗户和 GetWindowThreadProcessId 检查窗口是否是由上一步中恢复的任何过程创建的。
3.-如果窗口是由步骤1中定义的一个过程之一创建的;使用ShowWindow功能隐藏窗口。
您可以监视您创建的过程,并检查是否创建了新的过程/窗口。

其他提示

你可以启动该进程从一个服务(正在运行的网络服务用户的实例)。这将防止他们表现出任何的用户界面。它将然而防止能够看ui在所有,甚至如果你想在稍后的时间。

另一个选择就是做什么用的窗口站和桌面看看 节约窗口站和桌面上MSDN.一个想法就是使用 CreateDesktop 然后,指定这样的lpDesktop参数在STARTUPINFO结构给予CreateProcess.如果你在稍后的时间要显示用户界面,使用 SwitchDesktop.

尝试si.wshowwindow = 0;有趣的是,这对我有用,而不是SW_HIDE,但应该具有相同的价值。

您可以启动应用程序,然后将WM_Size消息发送到其主窗口。

http://msdn.microsoft.com/en-us/library/ms632646(V=VS.85).aspx

根据 MSDN, ,看起来您需要在DWFLAGS中传递此标志。

STARTF_USESHOWWINDOW 0x00000001 - The wShowWindow member contains additional information.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top