Не допускайте блокування екрана Windows під час гри з джойстиком


12

Моя система Windows 7 налаштована на блокування екрана після 20 хвилин бездіяльності (це політика на робочому місці; я не можу змінити це налаштування).

Коли я використовую клавіатуру / мишу, Windows розглядає їх як дані користувача, і тому екран залишається розблокованим. Однак, коли я граю в будь-яку гру, використовуючи лише джойстик, Windows розглядає це як недіяльність, і, таким чином, екран блокується після таймауту.

Чи є спосіб запобігти блокуванню екрана під час використання ігор на основі джойстика?

В якості вирішення, я зараз відтворюю кілька випадкових відео (приглушених) у фоновому режимі за допомогою VLC, що запобігає блокуванню екрана. Але повинен бути кращий спосіб вирішити цю проблему ...

Можливо, я можу написати сценарій, який би імітував деякі натискання клавіш, наприклад, {NUMLOCK}{NUMLOCK}через sendkeys. Однак завжди є можливість непередбачуваного побічного ефекту цього, наприклад, заборонити мені використовувати ці клавіші в моїх ігрових параметрах.


Так, це можна досягти так, як ви пропонуєте. Але ви перевірили, чи можете ви перемикати плани живлення? (Замість зміни параметрів плану електроживлення.) Іноді у програмі живлення високої продуктивності вимкнено функції енергозбереження. А також: якщо вони заблокували налаштування вашого плану живлення, вони залишили незаблокованою можливість встановлення або запуску програмного забезпечення, не дозволеного адміністраторами?
miroxlav

"Іноді у програмі живлення високої продуктивності вимкнено енергозберігаючі функції" Хороша ідея. Однак це налаштування застосовується як політика в налаштуваннях заставки, а не в налаштуваннях плану енергоспоживання. "чи залишили вони незаблокованою можливість встановлення або запуску програмного забезпечення, не дозволеного адміністраторами". Загалом, так, але ці програмні засоби не можуть змінити налаштування, що застосовуються політикою.
anishsane

Хтось знає про будь-який Windows API, щоб запобігти блокуванню екрана, той, який використовують медіаплеєри, як VLC, під час відтворення відео?
anishsane

Відповіді:


1

Щоразу, коли ви натискаєте клавішу на клавіатурі або рухаєтесь / клацаєте мишкою, Windows скидає таймер очікування . Існує функція API Windows, яку можна викликати, яка скидає таймер очікування точно так само. Викликаючи функцію через рівні проміжки часу, заставка ніколи не активується, а комп'ютер ніколи не блокується. Це те, що робить VLC та інші програми.

Назва функції є SetThreadExecutionStateі знаходиться в kernel32.dll. У VB фактичний виклик виглядає приблизно так:

SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)

Дві константи:

ES_SYSTEM_REQUIRED = &H1 і ES_DISPLAY_REQUIRED = &H2

Ви не можете робити ці дзвінки з VBScript, тому вам знадобиться щось більш вдосконалене, щоб кодувати це.

До речі, сказане вище - це технічно правильний спосіб зробити це. Багато комунальних служб, які я бачив в Інтернеті, використовують нерозумні хитрощі, як імітація натискань клавіш або тремтіння миші. На мою думку, це погано, оскільки це може заважати вашій роботі.

У всякому разі, я занадто багато відмовився. Цей вид належить до Stack Overflow.


0

Ви можете використовувати SetThreadExecutionStateфункцію, передбачену модулем ctypes Python, як частину окремої програми Python, яку можна запустити у фоновому режимі та вийти за допомогою Ctrl + C. (Завдяки відповіді @ misha256 за пояснення використання цієї функції!)

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

Я створив цей сценарій для Windows. Відвідайте сторінку випуску GitHub тут .


1
Замість 0як заповнювача, стандартний спосіб pass.
anishsane

1
Також краще трохи поспати (), а не проходити. Інакше це буде зайнято-чекати і споживати процесор. Можна навіть там спати годинами.
anishsane

0

Просто запустіть файл з ім'ям: no_sleep.vbs. Цей текстовий файл no_sleep.vbsповинен містити текстовий матеріал нижче.
Якщо не знаєте, як створити порожній текстовий файл і перейменувати його розширення, будь ласка, google.

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

Клавіша F13 не повинна перешкоджати ігровим параметрам


Хм. Може працювати.
anishsane
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.