Pregunta

Estoy escribiendo un marco de pruebas web para Windows que utiliza varios navegadores web para aplicaciones de prueba. Quiero poner en marcha los navegadores ocultos pero que no está funcionando.

Estoy usando CreateProcess para iniciar los navegadores con la bandera 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);

Funciona bien para Internet Explorer y otras aplicaciones, pero no con Firefox y otros navegadores. Soy consciente de que un proceso es capaz de elegir si desea o no seguir las banderas pasado. ¿Hay alguna manera que puedo forzar su inicio escondido?

Probablemente puede esperar hasta que aparezca en la ventana y luego ocultarlo al obtener un identificador de la ventana abierta. Pero estoy en busca de solución limpiadora.

¿Fue útil?

Solución

El problema es que se utiliza el valor de wShowWindow sólo cuando el ShowWindow función se llama con el comando SW_SHOWDEFAULT, además, como dijo el navegador FastAl crear algún proceso adicional para hacer las tareas adicionales.
Sobre la base de que la idea y la respuesta de FastAl, usted puede hacer esto para ocultar las ventanas creadas por el proceso que creó:
1.- Crear una lista de procesos con: CreateToolhelp32Snapshot, Process32First, Process32Next y CloseHandle; teniendo sólo el proceso que ha sido creado por el proceso que ha creado. Aquí es una demostración de cómo utilizar estas funciones, funciona con cualquier versión de windows, excepto windows NT.
2.- Uso EnumWindows para enumerar las ventanas en la pantalla y con un chequeo GetWindowThreadProcessId si las ventanas fue creado por cualquiera de los procedimientos se recuperó en el paso anterior.
3.- Si las ventanas fue creado por uno del proceso definido en la etapa 1; ocultar las ventanas utilizando la función ShowWindow.
Puede supervisar el proceso creado por usted y comprobar si / ventanas se crean nuevo proceso.

Otros consejos

Se podría poner en marcha los procesos de un servicio (que se ejecuta como el usuario de servicio de red, por ejemplo). Esto evitará que mostrar ninguna interfaz de usuario. Será sin embargo le impide ser capaz de mirar a la interfaz de usuario en absoluto, incluso si se quiere en un momento posterior.

Otra opción sería hacer algo con las estaciones de ventana y de escritorio, echar un vistazo a la sección acerca de las estaciones de ventana y de escritorio en MSDN . Una idea sería utilizar CreateDesktop y especificando esta computadora de escritorio como el parámetro lpDesktop en la estructura STARTUPINFO dado a CreateProcess. Si en un momento posterior desea mostrar la interfaz de usuario, el uso SwitchDesktop .

try si.wShowWindow = 0; divertido esto funcionó para mí, no SW_HIDE que debe llevar el mismo valor sin embargo.

Puede iniciar la aplicación y luego enviar un mensaje WM_SIZE a su ventana principal.

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

De acuerdo con MSDN , Parece que tienen que pasar esta bandera en dwFlags.

STARTF_USESHOWWINDOW 0x00000001 - The wShowWindow member contains additional information.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top