私のWindows7システムは、20分間操作がないと画面をロックするように設定されています(これは職場で適用されるポリシーです。この設定を変更することはできません)。
キーボード/マウスを使用している場合、Windowsはそれらをユーザー入力として扱うため、画面のロックは解除されたままになります。ただし、ジョイスティックのみを使用してゲームをプレイしている場合、Windowsはそれをアクティビティなしとして処理するため、タイムアウト後に画面がロックされます。
ジョイスティックベースのゲームの使用中に画面ロックを防ぐ方法はありますか?
回避策として、現在、画面ロックを防ぐVLCを使用して、バックグラウンドでランダムなビデオ(ミュート)を再生しています。しかし、この問題を処理するためのより良い方法があるはずです...
sendkeys
を介して{NUMLOCK}{NUMLOCK}
のようないくつかのキーストロークをシミュレートするスクリプトを作成することもできます。ただし、ゲームオプションでこれらのキーを使用できなくなるなど、意図しない副作用が発生する可能性は常にあります。
キーボードのキーを押すか、マウスを移動/クリックするたびに、Windowsはそのアイドルタイマーをリセットします。まったく同じ方法でアイドルタイマーをリセットする、呼び出すことができるWindowsAPI関数があります。定期的に関数を呼び出すことにより、スクリーンセーバーがアクティブになることはなく、コンピューターがロックされることもありません。これは、VLCやその他のアプリケーションが行うことです。
関数名はSetThreadExecutionState
で、_kernel32.dll
_にあります。 VBでは、実際の呼び出しは次のようになります。
SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)
2つの定数は次のとおりです。
_ES_SYSTEM_REQUIRED = &H1
_および_ES_DISPLAY_REQUIRED = &H2
_
VBScriptからこれらの呼び出しを行うことはできないため、これをコーディングするには、より高度なものが必要になります。
ちなみに、上記は技術的に正しいこれを行う方法です。私がWebで見た多くのユーティリティは、キーストロークのシミュレーションやマウスの揺れなどのばかげたトリックを使用しています。それはあなたの仕事を妨げる可能性があるので、私の意見では悪いです。
とにかく、私はあまりにも逸脱しました。この種のものはStackOverflowに属しています。
Pythonのctypesモジュールによって提供されるSetThreadExecutionState
関数を、スタンドアロンの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リリースページにアクセスしてください ここ 。
次の名前のファイルを実行するだけです:no_sleep.vbs
。このテキストファイルno_sleep.vbs
には以下のテキストが含まれている必要があります。
空白のテキストファイルを作成して拡張子の名前を変更する方法がわからない場合は、グーグルで検索してください。
set wsc = CreateObject("WScript.Shell")
Do
'Five minutes
WScript.Sleep(5*60*1000)
wsc.SendKeys("{F13}")
Loop
キーF13はゲームオプションに干渉してはなりません