0

I'm writing a web testing framework for windows that uses multiple browsers to test web apps. I want to launch the browsers hidden but it's not working.

I'm using CreateProcess to start the browsers with the SW_HIDE flag

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);

It works fine for internet explorer and other apps, but fails with firefox and other browsers. I'm aware that a process is able to choose whether or not to follow the passed flags. Is there any way i can force it to start hidden?

I can probably wait until the window shows up and then hide it by getting a handle to the open window. But I'm looking for cleaner solution.

4

5 回答 5

1

问题是只有在使用命令调用wShowWindow函数时才使用的值,另外正如 FastAl 所说,浏览器会创建一些额外的进程来执行额外的任务。 根据您的想法和 FastAl 的答案,您可以这样做来隐藏由您创建的进程创建的窗口: 1.- 创建一个进程列表:、和; 仅采用您创建的进程已创建的进程。是如何使用此功能的演示,它适用于除 Windows NT 以外的任何 Windows 版本。 2.-用于枚举屏幕上的窗口并使用ShowWindowSW_SHOWDEFAULT

CreateToolhelp32SnapshotProcess32FirstProcess32NextCloseHandle
EnumWindowsGetWindowThreadProcessId检查窗口是否由上一步中恢复的任何进程创建。
3.- 如果窗口是由步骤 1 中定义的过程之一创建的;使用 ShowWindow 函数隐藏窗口。
您可以监控您创建的进程并检查是否创建了新的进程/窗口。

于 2010-12-22T21:18:35.750 回答
0

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

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

于 2010-12-22T12:08:13.283 回答
0

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

于 2010-12-22T01:25:44.387 回答
0

您可以从服务启动进程(例如以 NETWORK SERVICE 用户身份运行)。这将阻止他们显示任何 UI。但是,它会阻止您查看 ui,即使您想在以后查看。

另一种选择是使用 Window Stations and Desktops 做一些事情,请查看MSDN 上有关 Window Stations and Desktops 的部分。一个想法是使用CreateDesktop,然后将此桌面指定为给 CreateProcess 的 STARTUPINFO 结构中的 lpDesktop 参数。如果您稍后想要显示 UI,请使用SwitchDesktop

于 2010-12-20T11:15:19.733 回答
-1

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

STARTF_USESHOWWINDOW 0x00000001 - The wShowWindow member contains additional information.
于 2010-12-13T18:23:29.703 回答