Ngăn chặn khóa màn hình Windows khi chơi với phím điều khiển


12

Hệ thống Windows 7 của tôi được thiết lập để khóa màn hình sau 20 phút không hoạt động (đây là chính sách được thi hành tại nơi làm việc; tôi không thể thay đổi cài đặt này).

Khi tôi đang sử dụng bàn phím / chuột, Windows coi chúng là đầu vào của người dùng và do đó màn hình vẫn được mở khóa. Tuy nhiên, khi tôi đang chơi bất kỳ trò chơi nào chỉ sử dụng cần điều khiển, Windows coi đó là không có hoạt động, và do đó màn hình bị khóa sau khi hết thời gian.

Có cách nào để ngăn chặn khóa màn hình trong khi sử dụng các trò chơi dựa trên cần điều khiển không?

Như một giải pháp thay thế, tôi hiện đang phát một số video ngẫu nhiên (tắt tiếng) trong nền bằng VLC, điều này ngăn khóa màn hình. Nhưng nên có một cách tốt hơn để xử lý vấn đề này ...

Tôi có thể có thể viết một kịch bản, mô phỏng một số tổ hợp phím như {NUMLOCK}{NUMLOCK}thông qua sendkeys. Tuy nhiên, luôn có khả năng xảy ra tác dụng phụ ngoài ý muốn, chẳng hạn như ngăn tôi sử dụng các phím này trong các tùy chọn trò chơi của mình.


Có nó có thể đạt được theo cách bạn đề xuất. Nhưng bạn đã kiểm tra xem bạn có thể chuyển đổi kế hoạch điện? (Thay vì thay đổi cài đặt gói điện.) Đôi khi, gói năng lượng Hiệu suất cao có các tính năng tiết kiệm năng lượng bị tắt. Và cũng: nếu họ khóa cài đặt gói điện của bạn, họ có mở khóa khả năng cài đặt hoặc chạy phần mềm không được quản trị viên ủy quyền không?
miroxlav 23/2/2015

"Đôi khi gói năng lượng hiệu suất cao có các tính năng tiết kiệm năng lượng bị vô hiệu hóa" Ý tưởng tốt .. Tuy nhiên, cài đặt này được thi hành như một chính sách trong cài đặt tiết kiệm màn hình, không phải cài đặt gói điện. "Họ đã mở khóa khả năng cài đặt hoặc chạy phần mềm không được ủy quyền bởi quản trị viên" Nói chung, có, nhưng những phần mềm đó không thể thay đổi cài đặt được thi hành bởi chính sách.
anishsane

Có ai biết bất kỳ API windows nào, để ngăn chặn khóa màn hình, cái mà người chơi phương tiện như VLC sử dụng, trong khi phát video không?
anishsane

Câu trả lời:


1

Bất cứ khi nào bạn nhấn một phím trên bàn phím hoặc di chuyển / nhấp chuột, Windows sẽ đặt lại bộ đếm thời gian nhàn rỗi của nó . Có một chức năng API Windows mà bạn có thể gọi để đặt lại bộ đếm thời gian nhàn rỗi theo cùng một cách. Bằng cách gọi chức năng theo định kỳ, trình bảo vệ màn hình sẽ không bao giờ kích hoạt và máy tính sẽ không bao giờ khóa. Đây là những gì VLC và các ứng dụng khác làm.

Tên hàm là SetThreadExecutionStatevà được tìm thấy trong kernel32.dll. Trong VB, cuộc gọi thực tế trông như thế này:

SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)

Hai hằng số là:

ES_SYSTEM_REQUIRED = &H1ES_DISPLAY_REQUIRED = &H2

Bạn không thể thực hiện các cuộc gọi này từ VBScript, vì vậy bạn cần một cái gì đó cao cấp hơn để mã hóa cuộc gọi này.

Ngẫu nhiên, ở trên là cách chính xác về mặt kỹ thuật để làm điều này. Nhiều tiện ích tôi đã thấy trên web sử dụng các thủ thuật ngớ ngẩn như mô phỏng tổ hợp phím hoặc lắc chuột. Điều đó theo tôi là xấu, vì nó có thể cản trở công việc của bạn.

Dù sao, tôi đã lạc đề quá nhiều. Loại công cụ này thuộc về Stack Overflow.


0

Bạn có thể sử dụng SetThreadExecutionStatechức năng, như được cung cấp bởi mô-đun ctypes của Python, như một phần của ứng dụng Python độc lập mà bạn có thể chạy trong nền và thoát bằng Ctrl + C. (Cảm ơn câu trả lời của @ misha256 vì đã giải thích việc sử dụng chức năng này!)

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

Tôi đã xây dựng tập lệnh này cho Windows. Truy cập trang phát hành GitHub tại đây .


1
Thay vì 0là giữ chỗ, cách tiêu chuẩn là pass.
anishsane

1
Ngoài ra, tốt hơn là giữ một số giấc ngủ () thay vì vượt qua. Nếu không, điều này sẽ bận - chờ và tiêu thụ CPU. Bạn thậm chí có thể ngủ hàng giờ ở đó.
anishsane

0

Chỉ cần chạy một tệp có tên : no_sleep.vbs. Tập tin văn bản này no_sleep.vbsnên chứa các vấn đề văn bản dưới đây.
Vui lòng google nếu không biết cách tạo tệp văn bản trống và đổi tên phần mở rộng của nó.

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

Phím F13 không được can thiệp vào các tùy chọn trò chơi


Hừm. Có thể làm việc.
anishsane
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.