Creando procesos ocultos (ventana no visible)

Estoy utilizando CreateProcess () con indicadores de inicio configurados en STARTF_USESHOWWINDOW y SW_HIDE para iniciar una aplicación en segundo plano con su ventana oculta. Estoy haciendo esto para ejecutar tareas de mantenimiento progtwigdas y no quiero que me molesten con Windows.

En la mayoría de los casos, las ventanas están ocultas, pero hay casos en que la ventana del progtwig aparece frente a usted (por ejemplo, Chrome de Google: comencé a probar con diferentes aplicaciones para ver si se trataba de un problema de una vez, pero no …).

Esto sucede menos en Windows XP, pero sucede mucho en Vista.

¿Hay una bandera que me falta? ¿Hay alguna otra manera de crear un proceso con su ventana oculta?

¡Gracias!

mi código de muestra es:

char *ProgramName STARTUPINFO StartupInfoF; PROCESS_INFORMATION ProcessInfoF; memset(&StartupInfoF, 0, sizeof(StartupInfoF)); memset(&ProcessInfoF, 0, sizeof(ProcessInfoF)); StartupInfoF.cb = sizeof(StartupInfoF); StartupInfoF.wShowWindow = SW_HIDE; StartupInfoF.dwFlags = STARTF_USESHOWWINDOW; if (CreateProcess(ProgramName, "", 0, 0, FALSE, DETACHED_PROCESS, 0, 0, &StartupInfoF, &ProcessInfoF) == FALSE) { // error } else { // OK } 

Puede iniciar el proceso en otro escritorio, utilizando el miembro lpDesktop de la estructura STARTUPINFO que se pasó a CreateProcess. De esta manera, el proceso tendrá todas sus ventanas mostradas, pero en otro escritorio, para que usted (o sus usuarios) no se moleste con él.

Nunca he trabajado con varios escritorios, así que no puedo decir cuáles serían los efectos secundarios, pero creo que es factible. Comience mirando a CreateDesktop y avance.

No recuerdo la respuesta a su pregunta, pero me gustaría sugerir que tal vez no debería mantener la ventana totalmente oculta. Si desea que la ventana esté fuera del camino, será suficiente minimizarla; ocultarlo completamente solo elimina la posibilidad de verificar sus tareas de mantenimiento progtwigdas.

Algunos progtwigs pueden ignorar / anular el indicador SW_HIDE . Puedes intentar ocultar la ventana después de que se inicie el proceso secundario.

Otra opción es tratar de usar CreateProcessAsUser para ejecutar procesos en la sesión 0, que tiene un escritorio aislado (a partir de la versión de Vista).

Yo sugeriría que sea un servicio. Por un lado, eso le permitirá ejecutar su mantenimiento progtwigdo incluso cuando nadie haya iniciado sesión. Por otro lado, es bastante fácil configurar los servicios para que no tengan acceso al escritorio.