Mój system Windows 7 jest ustawiony na blokowanie ekranu po 20 minutach bezczynności (jest to zasada obowiązująca w miejscu pracy; nie mogę zmienić tego ustawienia).
Kiedy korzystam z klawiatury / myszy, Windows traktuje je jako dane wejściowe użytkownika, a zatem ekran pozostaje odblokowany. Jednak gdy gram w dowolną grę przy użyciu wyłącznie joysticka, system Windows traktuje to jako brak aktywności, dlatego ekran zostaje zablokowany po upływie limitu czasu.
Czy istnieje sposób, aby zapobiec blokadzie ekranu podczas korzystania z gier opartych na joysticku?
Aby obejść ten problem, obecnie odtwarzam losowe wideo (wyciszone) w tle za pomocą VLC, co zapobiega blokowaniu ekranu. Ale powinien istnieć lepszy sposób na rozwiązanie tego problemu ...
Mógłbym napisać skrypt, który symulowałby niektóre naciśnięcia klawiszy, takie jak {NUMLOCK}{NUMLOCK}
via sendkeys
. Jednak zawsze istnieje możliwość niezamierzonego efektu ubocznego, takiego jak uniemożliwienie mi korzystania z tych klawiszy w opcjach gry.
źródło
Odpowiedzi:
Za każdym razem, gdy naciśniesz klawisz na klawiaturze lub przesuniesz / klikniesz myszą, system Windows resetuje licznik czasu bezczynności . Istnieje funkcja API systemu Windows, którą można wywołać, która resetuje licznik czasu bezczynności dokładnie w ten sam sposób. Wywołując funkcję w regularnych odstępach czasu, wygaszacz ekranu nigdy się nie aktywuje, a komputer nigdy się nie blokuje. To właśnie robią VLC i inne aplikacje.
Nazwa funkcji
SetThreadExecutionState
znajduje się wkernel32.dll
. W VB rzeczywiste połączenie wygląda następująco:SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)
Dwie stałe to:
ES_SYSTEM_REQUIRED = &H1
iES_DISPLAY_REQUIRED = &H2
Nie możesz wykonywać tych wywołań z VBScript, więc potrzebujesz czegoś bardziej zaawansowanego, aby to zakodować.
Nawiasem mówiąc, powyższe jest technicznie poprawnym sposobem na zrobienie tego. Wiele narzędzi, które widziałem w Internecie, używa głupich sztuczek, takich jak symulowanie naciśnięć klawiszy lub poruszanie myszą. Moim zdaniem jest to złe, ponieważ może zakłócać twoją pracę.
W każdym razie za dużo dygresję. Tego rodzaju rzeczy należą do przepełnienia stosu.
źródło
Możesz użyć
SetThreadExecutionState
funkcji dostarczonej przez moduł ctypes Pythona, jako części samodzielnej aplikacji Python, którą możesz uruchomić w tle i wyjść z Ctrl + C. (Dzięki odpowiedzi @ misha256 za wyjaśnienie korzystania z tej funkcji!)Zbudowałem ten skrypt dla systemu Windows. Odwiedź stronę wydania GitHub tutaj .
źródło
0
zastępczego standardowym sposobem jestpass
.Wystarczy uruchomić plik o nazwie:
no_sleep.vbs
. Ten plik tekstowyno_sleep.vbs
powinien zawierać tekst poniżej.Proszę google, jeśli nie wiesz, jak utworzyć pusty plik tekstowy i zmienić nazwę jego rozszerzenia.
Klawisz F13 nie powinien zakłócać opcji gry
źródło