Evita el bloqueo de pantalla de Windows cuando juegas con el joystick


12

Mi sistema Windows 7 está configurado para bloquear la pantalla después de 20 minutos de inactividad (esta es una política aplicada en el lugar de trabajo; no puedo cambiar esta configuración).

Cuando estoy usando el teclado / mouse, Windows los trata como entradas del usuario y, por lo tanto, la pantalla permanece desbloqueada. Sin embargo, cuando estoy jugando cualquier juego usando solo joystick, Windows trata eso como ninguna actividad y, por lo tanto, la pantalla se bloquea después del tiempo de espera.

¿Hay alguna manera de evitar el bloqueo de pantalla al usar juegos basados ​​en joystick?

Como solución alternativa, actualmente estoy reproduciendo algunos videos aleatorios (silenciados) en segundo plano usando VLC, que evita el bloqueo de pantalla. Pero debería haber una mejor manera de manejar este problema ...

Posiblemente podría escribir un script, que simularía algunas pulsaciones de teclas como {NUMLOCK}{NUMLOCK}via sendkeys. Sin embargo, siempre existe la posibilidad de un efecto secundario no deseado de esto, como evitar que use estas teclas en mis opciones de juego.


Sí, se puede lograr de la manera que sugieres. ¿Pero comprobaste si puedes cambiar los planes de energía? (En lugar de cambiar la configuración del plan de energía). A veces, el plan de energía de alto rendimiento tiene funciones de ahorro de energía deshabilitadas. Y también: si bloquearon la configuración de su plan de energía, ¿dejaron desbloqueada la capacidad de instalar o ejecutar software no autorizado por los administradores?
miroxlav

"A veces, el plan de energía de alto rendimiento tiene funciones de ahorro de energía deshabilitadas" Buena idea ... Sin embargo, esta configuración se aplica como política en la configuración del protector de pantalla, no en la configuración del plan de energía. "dejaron desbloqueada la capacidad de instalar o ejecutar software no autorizado por los administradores" En general, sí, pero esos softwares no pueden cambiar la configuración impuesta por la política.
anishsane

¿Alguien sabe de alguna API de Windows, para evitar el bloqueo de pantalla, el que usan los reproductores multimedia como VLC, mientras reproducen videos?
anishsane

Respuestas:


1

Cada vez que presiona una tecla en el teclado, o mueve / hace clic con el mouse, Windows restablece su temporizador inactivo . Hay una función API de Windows a la que puede llamar que restablece el temporizador inactivo exactamente de la misma manera. Al llamar a la función a intervalos regulares, el protector de pantalla nunca se activará y la computadora nunca se bloqueará. Esto es lo que hacen VLC y otras aplicaciones.

El nombre de la función es SetThreadExecutionStatey se encuentra en kernel32.dll. En VB, la llamada real se ve así:

SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)

Las dos constantes son:

ES_SYSTEM_REQUIRED = &H1 y ES_DISPLAY_REQUIRED = &H2

No puede realizar estas llamadas desde VBScript, por lo que necesitaría algo más avanzado para codificar esto.

Por cierto, lo anterior es la forma técnicamente correcta de hacer esto. Muchas utilidades que he visto en la web usan trucos tontos como simular pulsaciones de teclas o mover el mouse. Eso es malo en mi opinión, ya que puede interferir con su trabajo.

De todos modos, me he desviado demasiado. Este tipo de cosas pertenece a Stack Overflow.


0

Puede usar la SetThreadExecutionStatefunción, como lo proporciona el módulo ctypes de Python, como parte de una aplicación Python independiente que puede ejecutar en segundo plano y salir con Ctrl + C. (¡Gracias a la respuesta de @ misha256 por explicar el uso de esta función!)

import ctypes
from time import sleep

ES_CONTINUOUS        = 0x80000000
ES_SYSTEM_REQUIRED   = 0x00000001

# CONTINUOUS repeats the action until the application closes,
# SYSTEM_REQUIRED 'forces the system to be in the working state by resetting the system idle timer.'
ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED)

# wait until broken
while True:
    # attempt to run the following code
    try:
        sleep(1) # thanks @anishsane
    except(KeyboardInterrupt): # catch a Ctrl+C
        break # stop waiting

He creado este script para Windows. Visite la página de lanzamiento de GitHub aquí .


1
En lugar de 0como marcador de posición, la forma estándar es pass.
anishsane

1
Además, es mejor mantener un poco de sueño () en lugar de pasar. De lo contrario, esto esperará ocupado y consumirá CPU. Incluso puedes dormir durante horas allí.
anishsane

0

Sólo tiene que ejecutar un archivo llamado: no_sleep.vbs. Este archivo de texto no_sleep.vbsdebe contener el texto a continuación.
Busque en Google si no sabe cómo crear un archivo de texto en blanco y cambie el nombre de su extensión.

set wsc = CreateObject("WScript.Shell")
Do
   'Five minutes
    WScript.Sleep(5*60*1000)
    wsc.SendKeys("{F13}")
Loop

La tecla F13 no debería interferir con las opciones del juego.


Hmm Podría funcionar.
anishsane
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.