조이스틱으로 재생할 때 Windows 화면 잠금 방지


12

내 Windows 7 시스템은 20 분 동안 활동이 없으면 화면을 잠그도록 설정되어 있습니다 (이는 직장에서 시행되는 정책이므로이 설정을 변경할 수 없습니다).

키보드 / 마우스를 사용하는 경우 Windows는 키보드 / 마우스를 사용자 입력으로 취급하므로 화면 잠금이 해제 된 상태로 유지됩니다. 그러나 조이스틱 만 사용하여 게임을 할 때 Windows는이를 활동 없음으로 취급하므로 시간 초과 후 화면이 잠 깁니다.

조이스틱 기반 게임을 사용하는 동안 화면 잠금을 방지하는 방법이 있습니까?

해결 방법으로 현재 VLC를 사용하여 백그라운드에서 임의의 비디오 (음소거)를 재생하여 화면 잠금을 방지합니다. 그러나이 문제를 처리하는 더 좋은 방법이 있어야합니다 ...

{NUMLOCK}{NUMLOCK}via 같은 키 입력을 시뮬레이트하는 스크립트를 작성할 수 있습니다 sendkeys. 그러나 게임 옵션에서 이러한 키를 사용하지 못하게하는 등 의도하지 않은 부작용이 발생할 가능성이 항상 있습니다.


예, 제안한 방식으로 달성 할 수 있습니다. 그러나 전원 계획을 전환 할 수 있는지 확인 했습니까? (전원 계획 설정을 변경하는 대신) 때때로 고성능 전원 계획에서 에너지 절약 기능이 비활성화되어 있습니다. 또한 : 전원 계획 설정을 잠근 경우 관리자가 승인하지 않은 소프트웨어를 설치하거나 실행하는 기능을 잠금 해제 상태로 두었습니까?
miroxlav

"일부 고성능 전원 관리 옵션에는 에너지 절약 기능이 비활성화되어 있습니다."좋은 생각입니다. 그러나이 설정은 전원 관리 옵션이 아니라 화면 보호기 설정의 정책으로 적용됩니다. "관리자가 승인하지 않은 소프트웨어를 설치하거나 실행할 수있는 기능을 잠금 해제 한 상태로 두 었음"일반적으로 해당 소프트웨어는 정책으로 시행되는 설정을 변경할 수 없습니다.
anishsane

VLC와 같은 미디어 플레이어가 비디오를 재생하는 동안 사용하는 화면 잠금을 방지하기 위해 Windows API를 아는 사람이 있습니까?
anishsane

답변:


1

키보드의 키를 누르거나 마우스를 움직이거나 클릭 할 때마다 Windows는 유휴 타이머를 재설정합니다 . 유휴 타이머를 정확히 동일한 방식으로 재설정하는 호출 할 수있는 Windows API 기능이 있습니다. 정기적으로 기능을 호출하면 화면 보호기가 활성화되지 않으며 컴퓨터가 절대 잠기지 않습니다. 이것이 VLC와 다른 응용 프로그램이하는 일입니다.

함수 이름은 SetThreadExecutionState및에 kernel32.dll있습니다. VB에서 실제 호출은 다음과 같습니다.

SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)

두 상수는 다음과 같습니다.

ES_SYSTEM_REQUIRED = &H1ES_DISPLAY_REQUIRED = &H2

VBScript에서 이러한 호출을 수행 할 수 없으므로이를 코딩하려면 더 고급 기능이 필요합니다.

또한 위 의 기술적으로 올바른 방법입니다. 웹에서 본 많은 유틸리티는 키 스트로크 시뮬레이션 또는 마우스 흔들림과 같은 바보 같은 트릭을 사용합니다. 그것은 당신의 작업을 방해 할 수 있기 때문에 내 의견으로는 나쁘다.

어쨌든, 나는 너무 많이 벗어났다. 이런 종류의 물건은 스택 오버플로에 속합니다.


0

SetThreadExecutionStatePython의 ctypes 모듈에서 제공 하는 기능을 백그라운드에서 실행하고 Ctrl + C로 종료 할 수있는 독립형 Python 응용 프로그램의 일부로 사용할 수 있습니다. (이 기능의 사용법을 설명해 주신 @ 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
또한 pass 대신 sleep ()을 유지하는 것이 좋습니다. 그렇지 않으면, 이것은 통화 중 대기하고 CPU를 소비합니다. 거기에서 몇 시간 동안 잠을 잘 수도 있습니다.
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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.