Вопрос

Я пишу Windows Web Framework для Windows, которые используют несколько браузеров для тестирования веб-приложений. Я хочу запустить браузеры, скрытые, но не работает.

Я использую 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);

Он отлично работает для Internet Explorer и других приложений, но не удается с Firefox и другими браузерами. Я понимаю, что процесс умеет выбирать, следует ли следовать прошедшему флаги. Есть ли способ, которым я могу заставить его начать скрывать?

Я, вероятно, могу подождать, пока окно не появится, а затем скрыть его, получив ручку в открытое окно. Но я ищу чистое решение.

Это было полезно?

Решение

Проблема в том, что значение wShowWindow используется только при функции ShowWindow называется с командой SW_SHOWDEFAULT, Кроме того, поскольку Fastal сказал, что браузер создает дополнительный процесс для выполнения дополнительных задач.
Основываясь на вашей идее и ответе на поставку, вы можете сделать это, чтобы скрыть окна, созданные процессом, который вы создали:
1.- Создайте список процессов с: CreateToolhelp32Snapshot, Process32First, Process32Next и CloseHandle; Принимая только процесс, который был создан процессом, который вы создали. Здесь Это демострация того, как использовать эту функцию, работает с любой версией Windows, кроме Windows NT.
2.- Используйте EnumWindows перечислить окна на экране и с GetWindowThreadProcessId Проверьте, были ли окна созданы любой из процессов, восстановленного на предыдущем шаге.
3. Если окна были созданы одним из процессов, определенного на этапе 1; Скрыть окна, используя функцию ShowWindow.
Вы можете отслеживать, созданный вами процессом и проверьте, созданы ли новые процессы / Windows.

Другие советы

Вы можете запустить процессы с сервиса (например, для пользователя сетевого сервиса). Это помешает им показать любой пользовательский интерфейс. Однако он не позволит вам вообще смотреть на UI, даже если вы хотите позже.

Другой вариант будет делать что-то с окнами и настольными компьютерами, взглянуть на Раздел о оконных станциях и настольных компьютерах на MSDN. Отказ Идея будет использовать Создать рабочий стол А затем указываю этот рабочий стол в качестве параметра LPDesktop в структуре StartUpinfo, приведенной для созданияProcess. Если вы позже хотите отобразить пользовательский интерфейс, используйте 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