ป้องกันการล็อกหน้าจอ Windows เมื่อเล่นด้วยจอยสติ๊ก


12

ระบบ Windows 7 ของฉันถูกตั้งค่าให้ล็อคหน้าจอหลังจากไม่มีกิจกรรมใด ๆ เป็นเวลา 20 นาที (นี่เป็นนโยบายบังคับใช้ในสถานที่ทำงานฉันไม่สามารถเปลี่ยนการตั้งค่านี้ได้)

เมื่อฉันใช้แป้นพิมพ์ / เมาส์ Windows ถือว่าพวกเขาเป็นอินพุตของผู้ใช้และทำให้หน้าจอยังคงถูกปลดล็อค อย่างไรก็ตามเมื่อฉันเล่นเกมใด ๆ ที่ใช้จอยสติ๊กเพียงอย่างเดียว Windows จะถือว่าไม่มีกิจกรรมและหน้าจอจะถูกล็อคหลังจากหมดเวลา

มีวิธีป้องกันการล็อกหน้าจอในขณะที่ใช้เกมที่ใช้จอยสติ๊กหรือไม่?

เพื่อเป็นการแก้ปัญหาฉันกำลังเล่นวิดีโอแบบสุ่ม (ปิดเสียง) ในพื้นหลังโดยใช้ VLC ซึ่งป้องกันการล็อกหน้าจอ แต่ควรมีวิธีที่ดีกว่าในการจัดการปัญหานี้ ...

ผมอาจจะเขียนสคริปต์ซึ่งจะจำลองการกดแป้นพิมพ์บางอย่างเช่นผ่านทาง{NUMLOCK}{NUMLOCK} sendkeysอย่างไรก็ตามมีความเป็นไปได้ที่จะเกิดผลข้างเคียงที่ไม่ได้ตั้งใจเช่นการป้องกันไม่ให้ฉันใช้ปุ่มเหล่านี้ในตัวเลือกเกมของฉัน


ใช่สามารถทำได้ในแบบที่คุณแนะนำ แต่คุณตรวจสอบว่าคุณสามารถเปลี่ยนแผนการใช้พลังงานได้หรือไม่ (แทนที่จะเปลี่ยนการตั้งค่าแผนการใช้พลังงาน) บางครั้งแผนพลังงานประสิทธิภาพสูงมีการปิดใช้งานคุณสมบัติประหยัดพลังงาน และยัง: หากพวกเขาล็อคการตั้งค่าแผนพลังงานของคุณพวกเขาปล่อยให้ปลดล็อคความสามารถในการติดตั้งหรือเรียกใช้ซอฟต์แวร์ที่ไม่ได้รับอนุญาตจากผู้ดูแลระบบหรือไม่?
miroxlav

"บางครั้งแผนพลังงานประสิทธิภาพสูงมีการปิดใช้งานคุณสมบัติประหยัดพลังงาน" ความคิดที่ดี .. อย่างไรก็ตามการตั้งค่านี้บังคับใช้เป็นนโยบายในการตั้งค่าโปรแกรมรักษาหน้าจอไม่ใช่การตั้งค่าแผนพลังงาน "พวกเขาปล่อยให้ปลดล็อคความสามารถในการติดตั้งหรือเรียกใช้ซอฟต์แวร์ที่ไม่ได้รับอนุญาตจากผู้ดูแลระบบ" โดยทั่วไปแล้วใช่ แต่ซอฟต์แวร์เหล่านั้นไม่สามารถเปลี่ยนการตั้งค่าที่บังคับใช้โดยนโยบาย
anishsane

มีใครรู้บ้างเกี่ยวกับ windows API เพื่อป้องกันการล็อกหน้าจอโปรแกรมเล่นสื่ออย่าง VLC ใช้ขณะเล่นวิดีโอหรือไม่
anishsane

คำตอบ:


0

เมื่อใดก็ตามที่คุณกดปุ่มบนแป้นพิมพ์หรือย้าย / คลิกเมาส์, Windows รีเซ็ตมันจับเวลาไม่ได้ใช้งาน มีฟังก์ชั่น Windows API ที่คุณสามารถเรียกได้ว่าจะรีเซ็ตตัวจับเวลาไม่ได้ทำงานในลักษณะเดียวกัน โดยการเรียกฟังก์ชั่นตามช่วงเวลาปกติโปรแกรมรักษาหน้าจอจะไม่เปิดใช้งานและคอมพิวเตอร์จะไม่ล็อค นี่คือสิ่งที่ 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
นอกจากนี้ยังเป็นการดีกว่าที่จะนอนต่อ () แทนที่จะผ่าน มิฉะนั้นการทำเช่นนี้จะไม่รอและใช้งาน CPU คุณสามารถนอนหลับได้นานหลายชั่วโมง
anishsane
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.