Impedir o bloqueio de tela do Windows ao jogar com joystick


12

Meu sistema Windows 7 está definido para bloquear a tela após 20 minutos de inatividade (esta é uma política aplicada ao local de trabalho; não posso alterar essa configuração).

Quando estou usando o teclado / mouse, o Windows os trata como entradas do usuário e, portanto, a tela permanece desbloqueada. No entanto, quando estou jogando qualquer jogo usando apenas o joystick, o Windows trata isso como nenhuma atividade e, portanto, a tela fica bloqueada após o tempo limite.

Existe uma maneira de impedir o bloqueio da tela enquanto estiver usando jogos com joystick?

Como solução alternativa, atualmente estou reproduzindo um vídeo aleatório (sem áudio) em segundo plano usando o VLC, o que impede o bloqueio da tela. Mas deve haver uma maneira melhor de lidar com esse problema ...

Eu poderia escrever um script, que simulasse algumas teclas como {NUMLOCK}{NUMLOCK}via sendkeys. No entanto, sempre há a possibilidade de um efeito colateral não intencional disso, como impedir que eu use essas chaves nas minhas opções de jogo.


Sim, isso pode ser alcançado da maneira que você sugere. Mas você verificou se pode mudar de plano de energia? (Em vez de alterar as configurações do plano de energia.) Às vezes, o plano de energia de alto desempenho tem os recursos de economia de energia desativados. E também: se eles bloquearam as configurações do seu plano de energia, deixaram desbloqueada a capacidade de instalar ou executar software não autorizado pelos administradores?
miroxlav

"Às vezes, o plano de energia de alto desempenho tem os recursos de economia de energia desativados" Boa idéia. No entanto, essa configuração é aplicada como política nas configurações de proteção de tela, não nas configurações do plano de energia. "eles deixaram desbloqueada a capacidade de instalar ou executar software não autorizado pelos administradores" Em geral, sim, mas esses softwares não podem alterar as configurações impostas pela política.
anishsane

Alguém conhece alguma API do Windows, para impedir o bloqueio de tela, aquele usado por players de mídia como o VLC, enquanto reproduz vídeos?
anishsane

Respostas:


1

Sempre que você pressiona uma tecla do teclado ou move / clica no mouse, o Windows redefine o timer ocioso . Há uma função da API do Windows que você pode chamar que redefine o timer inativo exatamente da mesma maneira. Ao chamar a função em intervalos regulares, o protetor de tela nunca será ativado e o computador nunca será bloqueado. É isso que o VLC e outros aplicativos fazem.

O nome da função é SetThreadExecutionStatee é encontrado em kernel32.dll. No VB, a chamada real é assim:

SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)

As duas constantes são:

ES_SYSTEM_REQUIRED = &H1 e ES_DISPLAY_REQUIRED = &H2

Você não pode fazer essas chamadas a partir do VBScript, portanto, você precisará de algo mais avançado para codificar isso.

Aliás, o acima é a maneira tecnicamente correta de fazer isso. Muitos utilitários que eu vi na Web usam truques tolos como simular pressionamentos de teclas ou agitar o mouse. Isso é ruim na minha opinião, pois pode interferir no seu trabalho.

De qualquer forma, eu divaguei demais. Esse tipo de coisa pertence ao Stack Overflow.


0

Você pode usar a SetThreadExecutionStatefunção, conforme fornecido pelo módulo ctypes do Python, como parte de um aplicativo Python independente, você pode executar em segundo plano e sair com Ctrl + C. (Obrigado pela resposta de @ misha256 por explicar o uso desta função!)

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

Eu criei esse script para Windows. Visite a página de lançamento do GitHub aqui .


1
Em vez de 0espaço reservado, a maneira padrão é pass.
anishsane

1
Além disso, é melhor dormir um pouco () em vez de passar. Caso contrário, isso irá esperar e ocupar a CPU. Você pode até dormir por horas lá.
Anishsane

0

Basta executar um arquivo chamado: no_sleep.vbs. Este arquivo de texto no_sleep.vbsdeve conter o assunto de texto abaixo.
Pesquise no Google se não souber como criar um arquivo de texto em branco e renomeie sua extensão.

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

A tecla F13 não deve interferir nas opções do jogo


Hmm. Poderia trabalhar.
anishsane 3/09/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.