Не допускайте блокування екрана 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.