2010-09-08 11 views
12

En un programa de C++ ejecutado en Win7, ¿hay alguna manera de simular un movimiento de mouse o algo así, solo para evitar que se inicie el protector de pantalla y que el sistema se quede dormido? Estoy buscando el enfoque mínimo y prefiero no usar .NET. Gracias, -nuun¿cómo evito los protectores de pantalla y duermo durante la ejecución de mi programa?

+2

qué ¿No cambias la configuración del protector de pantalla o la configuración de energía de tu sistema? –

+1

Como usuario de su programa, _I_ quiero decidirme si quiero que un protector de pantalla reduzca la velocidad de ejecución de un programa. Si usted es su propio usuario, siempre puede cambiar la configuración del sistema usted mismo. – sbi

+4

En realidad, esta es una pregunta válida. Creo que Windows Media Player hace esto cuando se reproduce un video y luego se justifica (no se quiere parar cada cinco minutos y mover el mouse para disfrutar de la película, ¿no?) También se desactiva el protector de pantalla solo para ver uno la película es exagerada). – Tomek

Respuesta

29

No te metas con la configuración del salvapantallas, usa SetThreadExecutionState. Esta es la API para informar a las ventanas en el hecho de que su aplicación está activa:

permite que una aplicación para informar al sistema que está en uso, por lo tanto evitando que el sistema entre en dormir o apagar la pantalla mientras que la aplicación se está ejecutando.

y

aplicaciones multimedia, como vídeo jugadores y aplicaciones de presentación, debe utilizar ES_DISPLAY_REQUIRED cuando pantalla de vídeo durante largos períodos de tiempo sin intervención del usuario

+0

SetThreadExecutionState() es ideal para controlar el sistema y mostrar la suspensión, pero * no * evitará que se inicie el protector de pantalla. Al menos la función doc dice que no. – naor

+4

Corrección: aunque la página de MSDN para estas funciones indica que "Esta función no detiene la ejecución del protector de pantalla". llamar con ES_DISPLAY_REQUIRED impide de hecho que se active el protector de pantalla. – naor

+3

este es también el camino a seguir (a través de p/invoke) si está usando .NET - http://pinvoke.net/default.aspx/kernel32.SetThreadExecutionState –

-2

No estoy muy seguro de por qué debe recurrir a esto. La desactivación simple de estas opciones en la configuración de energía funcionará.

¿Qué intentas lograr haciendo eso? Es su aplicación un servicio. En caso de que sea así, no necesita preocuparse por esto.

En caso de que su aplicación sea una aplicación de interfaz de usuario, tampoco puedo pensar en un caso de uso válido.

Eitherway necesitamos más información.

+0

dicen que es un juego automático largo que se jugará durante un juego donde no se requiere la entrada del usuario, no quieres que el protector de pantalla moleste a tu usuario – gldraphael

0

Suele ser una idea particularmente mala idea. El escritorio pertenece al usuario de su aplicación, no su aplicación.

Si ejecutaba una aplicación que deshabilitaba mi protector de pantalla (o se movía alrededor de los íconos de mi escritorio o se agregaba a mis varias barras de acceso rápido) sin mi permiso, se lo lanzaría rápidamente.

Y, si usted está el usuario, No lo haga en su aplicación. Cambiar manualmente al igual que el resto de nosotros :-)

Si debe hacerlo (y lo insto a que no, pero se puede sentir libre de hacer caso omiso de eso), no creo que el método ha cambiado desde NUEVO TESTAMENTO. Utiliza SystemParametersInfo con SPI_SETSCREENSAVEACTIVE para cambiar el comportamiento. Estos están en user32.dll de memoria.

Pero tengo un vago recuerdo de ver los problemas reportados con el uso de ese método en virtud de Win7 y creo que la solución era un cambio de registro, el establecimiento de ScreenSaveActive bajo HKEY_CURRENT_USER\Control Panel\Desktop a 0 (y de nuevo a 1 cuando haya terminado).

+1

dice que es un largo * autoplay * para jugar durante un juego donde no se requiere la entrada del usuario, no quiere que el protector de pantalla moleste a su usuario – gldraphael

+3

¿Mala idea? ¿Qué hay de los reproductores multimedia? –

1

Eso no es una mala idea, cualquier reproductor de medios decente lo hace ... Busque la función SystemParametersInfo(SPI_SETSCREENSAVEACTIVE ...) en Win32 api, debería hacer el truco.

+2

Eso no es lo que hacen los reproductores multimedia. Ver mi respuesta –

Cuestiones relacionadas