Empêcher le verrouillage de l'écran Windows lors de la lecture avec le joystick

12

Mon système Windows 7 est configuré pour verrouiller l'écran après 20 minutes d'inactivité (il s'agit d'une stratégie appliquée sur le lieu de travail; je ne peux pas modifier ce paramètre).

Lorsque j'utilise le clavier / la souris, Windows les traite comme des entrées utilisateur, et donc l'écran reste déverrouillé. Cependant, lorsque je joue à un jeu en utilisant uniquement un joystick, Windows considère cela comme aucune activité, et donc l'écran se verrouille après le délai d'expiration.

Existe-t-il un moyen d'empêcher le verrouillage de l'écran lors de l'utilisation de jeux basés sur un joystick?

Pour contourner ce problème, je suis en train de lire une vidéo aléatoire (en sourdine) en arrière-plan à l'aide de VLC, ce qui empêche le verrouillage de l'écran. Mais il devrait y avoir une meilleure façon de gérer ce problème ...

Je pourrais éventuellement écrire un script, qui simulerait certaines frappes comme {NUMLOCK}{NUMLOCK}via sendkeys. Cependant, il y a toujours la possibilité d'un effet secondaire involontaire, comme m'empêcher d'utiliser ces touches dans mes options de jeu.

anishsane
la source
Oui, cela peut être réalisé de la manière que vous proposez. Mais avez-vous vérifié si vous pouvez changer de plan d'alimentation? (Au lieu de modifier les paramètres du plan d'alimentation.) Parfois, le plan d'alimentation haute performance a des fonctionnalités d'économie d'énergie désactivées. Et aussi: s'ils ont verrouillé les paramètres de votre plan d'alimentation, ont-ils laissé déverrouillé la possibilité d'installer ou d'exécuter des logiciels non autorisés par les administrateurs?
miroxlav
"Parfois, le plan d'alimentation haute performance a des fonctionnalités d'économie d'énergie désactivées" Bonne idée .. Cependant, ce paramètre est appliqué en tant que stratégie dans les paramètres d'économiseur d'écran, pas les paramètres du plan d'alimentation. "ont-ils laissé déverrouillé la possibilité d'installer ou d'exécuter des logiciels non autorisés par les administrateurs" En général, oui, mais ces logiciels ne peuvent pas modifier les paramètres appliqués par la stratégie.
anishsane
Quelqu'un connaît-il une API Windows pour empêcher le verrouillage de l'écran, celui que les lecteurs multimédias comme VLC utilisent lors de la lecture de vidéos?
anishsane

Réponses:

1

Chaque fois que vous appuyez sur une touche du clavier ou déplacez / cliquez sur la souris, Windows réinitialise sa minuterie inactive . Il existe une fonction API Windows que vous pouvez appeler qui réinitialise le temporisateur d'inactivité exactement de la même manière. En appelant la fonction à intervalles réguliers, l'économiseur d'écran ne s'activera jamais et l'ordinateur ne se verrouillera jamais. C'est ce que font VLC et d'autres applications.

Le nom de la fonction est SetThreadExecutionStateet se trouve dans kernel32.dll. Dans VB, l'appel réel ressemble à ceci:

SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)

Les deux constantes étant:

ES_SYSTEM_REQUIRED = &H1 et ES_DISPLAY_REQUIRED = &H2

Vous ne pouvez pas passer ces appels à partir de VBScript, vous aurez donc besoin de quelque chose de plus avancé pour coder cela.

Soit dit en passant , ce qui précède est la façon techniquement correcte de le faire. De nombreux utilitaires que j'ai vus sur le Web utilisent des astuces idiotes comme la simulation de frappes au clavier ou le déplacement de la souris. C'est mauvais à mon avis, car cela peut interférer avec votre travail.

Quoi qu'il en soit, j'ai trop digressé. Ce genre de choses appartient à Stack Overflow.

misha256
la source
0

Vous pouvez utiliser la SetThreadExecutionStatefonction, fournie par le module ctypes de Python, dans le cadre d'une application Python autonome que vous pouvez exécuter en arrière-plan et quitter avec Ctrl + C. (Merci à la réponse de @ misha256 pour avoir expliqué l'utilisation de cette fonction!)

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

J'ai construit ce script pour Windows. Visitez la page de publication de GitHub ici .

Eric Reed
la source
1
Au lieu d' 0être un espace réservé, la méthode standard est pass.
anishsane
1
Aussi, il vaut mieux garder un peu sleep () au lieu de passer. Sinon, cela va attendre et consommer le CPU. Vous pouvez même y dormir pendant des heures.
anishsane
0

Il suffit d' exécuter un fichier nommé: no_sleep.vbs. Ce fichier texte no_sleep.vbsdoit contenir le texte ci-dessous.
Veuillez google si vous ne savez pas comment créer un fichier texte vierge et renommer son extension.

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

La touche F13 ne doit pas interférer avec les options de jeu

voyage sahara
la source
Hmm. Pourrait fonctionner.
anishsane