Cegah kunci layar Windows saat bermain dengan joystick

12

Sistem Windows 7 saya diatur untuk mengunci layar setelah 20 menit tidak aktif (ini adalah kebijakan yang diberlakukan di tempat kerja; Saya tidak dapat mengubah pengaturan ini).

Ketika saya menggunakan keyboard / mouse, Windows memperlakukan mereka sebagai input pengguna, dan dengan demikian layar tetap tidak terkunci. Namun, ketika saya memainkan game apa saja hanya menggunakan joystick, Windows memperlakukan itu sebagai tidak ada aktivitas, dan dengan demikian layar terkunci setelah batas waktu.

Apakah ada cara untuk mencegah kunci layar saat menggunakan game berbasis joystick?

Sebagai solusinya, saya saat ini memutar beberapa video acak (dibisukan) di latar belakang menggunakan VLC, yang mencegah kunci layar. Tetapi harus ada cara yang lebih baik untuk menangani masalah ini ...

Saya mungkin bisa menulis naskah, yang akan mensimulasikan beberapa penekanan tombol seperti {NUMLOCK}{NUMLOCK}via sendkeys. Namun, selalu ada kemungkinan efek samping yang tidak disengaja dari ini, seperti mencegah saya menggunakan tombol-tombol ini dalam opsi permainan saya.

anishsane
sumber
Ya itu bisa dicapai dengan cara yang Anda sarankan. Tetapi apakah Anda memeriksa apakah Anda dapat mengganti paket daya? (Alih-alih mengubah pengaturan paket daya.) Terkadang paket daya Kinerja Tinggi menonaktifkan fitur hemat energi. Dan juga: jika mereka mengunci pengaturan rencana daya Anda, apakah mereka membiarkan kemampuan untuk menginstal atau menjalankan perangkat lunak tidak diizinkan oleh admin?
miroxlav
"Terkadang rencana daya Kinerja Tinggi menonaktifkan fitur hemat energi" Ide bagus .. Namun, pengaturan ini diberlakukan sebagai kebijakan dalam pengaturan screen saver, bukan pengaturan rencana daya. "Apakah mereka membiarkan tidak terkunci kemampuan untuk menginstal atau menjalankan perangkat lunak yang tidak diizinkan oleh admin" Secara umum, ya, tetapi perangkat lunak itu tidak dapat mengubah pengaturan yang diberlakukan oleh kebijakan.
anishsane
Apakah ada yang tahu tentang windows API, untuk mencegah kunci layar, yang digunakan pemutar media seperti VLC, saat memutar video?
anishsane

Jawaban:

1

Setiap kali Anda menekan tombol pada keyboard, atau memindahkan / mengklik mouse, Windows me-reset timer idle -nya . Ada fungsi Windows API yang dapat Anda panggil yang mengatur ulang timer idle dengan cara yang persis sama. Dengan memanggil fungsi secara berkala, screen-saver tidak akan pernah aktif dan komputer tidak akan pernah mengunci. Inilah yang VLC dan aplikasi lain lakukan.

Nama fungsi adalah SetThreadExecutionStatedan ditemukan di kernel32.dll. Di VB, panggilan sebenarnya terlihat seperti ini:

SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)

Dua konstanta adalah:

ES_SYSTEM_REQUIRED = &H1 dan ES_DISPLAY_REQUIRED = &H2

Anda tidak dapat melakukan panggilan ini dari VBScript, jadi Anda perlu sesuatu yang lebih canggih untuk membuat kode ini.

Kebetulan, di atas adalah cara yang benar secara teknis untuk melakukan ini. Banyak utilitas yang saya lihat di web menggunakan trik konyol seperti mensimulasikan penekanan tombol atau mengguncang mouse. Itu menurut saya buruk, karena dapat mengganggu pekerjaan Anda.

Ngomong-ngomong, aku terlalu ngelantur. Barang-barang semacam ini milik Stack Overflow.

misha256
sumber
0

Anda dapat menggunakan SetThreadExecutionStatefungsi ini, seperti yang disediakan oleh modul ctypes Python, sebagai bagian dari aplikasi Python mandiri yang dapat Anda jalankan di latar belakang dan keluar dengan Ctrl + C. (Terima kasih atas jawabannya oleh @ misha256 untuk menjelaskan penggunaan fungsi ini!)

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

Saya telah membuat skrip ini untuk Windows. Kunjungi halaman rilis GitHub di sini .

Eric Reed
sumber
1
Alih-alih 0sebagai pengganti, cara standar adalah pass.
anishsane
1
Juga, lebih baik tetap tidur () daripada lewat. Kalau tidak, ini akan sibuk menunggu dan mengkonsumsi CPU. Anda bahkan bisa tidur berjam-jam di sana.
anishsane
0

Hanya menjalankan file bernama: no_sleep.vbs. File teks ini no_sleep.vbsharus berisi materi teks di bawah ini.
Silakan google jika tidak tahu cara membuat file teks kosong dan ganti namanya ekstensi.

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

Kunci F13 seharusnya tidak mengganggu opsi permainan

perjalanan sahara
sumber
Hmm. Bisa bekerja
anishsane