web-dev-qa-db-ja.com

ジョイスティックで遊んでいるときにWindowsの画面ロックを防ぐ

私のWindows7システムは、20分間操作がないと画面をロックするように設定されています(これは職場で適用されるポリシーです。この設定を変更することはできません)。

キーボード/マウスを使用している場合、Windowsはそれらをユーザー入力として扱うため、画面のロックは解除されたままになります。ただし、ジョイスティックのみを使用してゲームをプレイしている場合、Windowsはそれをアクティビティなしとして処理するため、タイムアウト後に画面がロックされます。

ジョイスティックベースのゲームの使用中に画面ロックを防ぐ方法はありますか?

回避策として、現在、画面ロックを防ぐVLCを使用して、バックグラウンドでランダムなビデオ(ミュート)を再生しています。しかし、この問題を処理するためのより良い方法があるはずです...

sendkeys を介して{NUMLOCK}{NUMLOCK}のようないくつかのキーストロークをシミュレートするスクリプトを作成することもできます。ただし、ゲームオプションでこれらのキーを使用できなくなるなど、意図しない副作用が発生する可能性は常にあります。

12
anishsane

キーボードのキーを押すか、マウスを移動/クリックするたびに、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に属しています。

1
misha256

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リリースページにアクセスしてください ここ

0
Eric Reed

次の名前のファイルを実行するだけです:no_sleep.vbs。このテキストファイルno_sleep.vbsには以下のテキストが含まれている必要があります。
空白のテキストファイルを作成して拡張子の名前を変更する方法がわからない場合は、グーグルで検索してください。

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

キーF13はゲームオプションに干渉してはなりません

0
sahara trip