Impedisci il blocco dello schermo di Windows quando giochi con il joystick


12

Il mio sistema Windows 7 è impostato per bloccare lo schermo dopo 20 minuti di inattività (questa è una politica applicata sul posto di lavoro; non posso modificare questa impostazione).

Quando sto usando la tastiera / il mouse, Windows li tratta come input dell'utente e quindi lo schermo rimane sbloccato. Tuttavia, quando sto giocando a qualsiasi gioco usando solo il joystick, Windows lo considera come nessuna attività e quindi lo schermo viene bloccato dopo il timeout.

Esiste un modo per impedire il blocco dello schermo durante l'utilizzo di giochi basati su joystick?

Come soluzione alternativa, sto attualmente riproducendo alcuni video casuali (disattivati) in background utilizzando VLC, che impedisce il blocco dello schermo. Ma dovrebbe esserci un modo migliore per gestire questo problema ...

Potrei eventualmente scrivere una sceneggiatura, che simulerebbe alcuni tasti come {NUMLOCK}{NUMLOCK}via sendkeys. Tuttavia, c'è sempre la possibilità di un effetto collaterale indesiderato di questo, come impedirmi di usare questi tasti nelle mie opzioni di gioco.


Sì, può essere raggiunto come suggerito. Ma hai verificato se puoi cambiare i piani di alimentazione? (Invece di modificare le impostazioni del piano di risparmio energia ). A volte il piano di risparmio energetico ad alte prestazioni ha funzioni di risparmio energetico disabilitate. E inoltre: se hanno bloccato le impostazioni del tuo piano di alimentazione, hanno lasciato sbloccata la possibilità di installare o eseguire software non autorizzato dagli amministratori?
miroxlav,

"A volte il piano di alimentazione ad alte prestazioni ha funzioni di risparmio energetico disattivate" Buona idea. Tuttavia, questa impostazione viene applicata come criterio nelle impostazioni di risparmio schermo, non nelle impostazioni del piano di risparmio energia. "hanno lasciato sbloccata la possibilità di installare o eseguire software non autorizzato dagli amministratori" In generale sì, ma quei software non possono modificare le impostazioni imposte dalla politica.
anishsane,

Qualcuno sa di qualche API di Windows, per impedire il blocco dello schermo, quello che usano i lettori multimediali come VLC, durante la riproduzione di video?
anishsane,

Risposte:


1

Ogni volta che premi un tasto sulla tastiera o muovi / fai clic con il mouse, Windows ripristina il timer di inattività . Esiste una funzione API di Windows che è possibile chiamare che reimposta il timer di inattività esattamente allo stesso modo. Chiamando la funzione a intervalli regolari, lo screen saver non si attiverà mai e il computer non si bloccherà mai. Questo è ciò che fanno VLC e altre applicazioni.

Il nome della funzione è SetThreadExecutionStatee si trova in kernel32.dll. In VB la chiamata effettiva è simile alla seguente:

SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)

Le due costanti sono:

ES_SYSTEM_REQUIRED = &H1 e ES_DISPLAY_REQUIRED = &H2

Non puoi effettuare queste chiamate da VBScript, quindi avresti bisogno di qualcosa di più avanzato per codificarlo.

Per inciso, quanto sopra è il modo tecnicamente corretto di farlo. Molte utility che ho visto sul web usano trucchi sciocchi come la simulazione di sequenze di tasti o il movimento del mouse. Secondo me è negativo, perché può interferire con il tuo lavoro.

Comunque, ho divagato troppo. Questo genere di cose appartiene allo StackTranslate.it.


0

Puoi usare la SetThreadExecutionStatefunzione, come fornita dal modulo ctypes di Python, come parte di un'applicazione Python autonoma che puoi eseguire in background ed uscire con Ctrl + C. (Grazie alla risposta di @ misha256 per aver spiegato l'uso di questa funzione!)

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

Ho creato questo script per Windows. Visita la pagina di rilascio di GitHub qui .


1
Invece di 0come segnaposto, il modo standard è pass.
anishsane,

1
Inoltre, è meglio tenere un po 'di sonno () invece di passare. Altrimenti, questo sarà molto in attesa e consumerà CPU. Puoi persino dormire per ore lì.
anishsane,

0

Basta eseguire un file denominato: no_sleep.vbs. Questo file di testo no_sleep.vbsdovrebbe contenere la seguente questione di testo.
Si prega di google se non si sa come creare un file di testo vuoto e rinominare la sua estensione.

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

Il tasto F13 non dovrebbe interferire con le opzioni di gioco


Hmm. Potrebbe funzionare.
Anishsane,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.