ジョイスティックで遊ぶときにWindows画面ロックを防止する


12

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

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

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

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

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


はい、それはあなたが提案する方法で達成することができます。しかし、電源プランを切り替えることができるかどうかを確認しましたか?(電源プランの設定を変更する代わりに)場合によっては、高性能電源プランで省エネ機能が無効になっていることがあります。また、電源プランの設定をロックした場合、管理者によって承認されていないソフトウェアをインストールまたは実行する機能をロック解除したままにしましたか?
miroxlav 2015

「ハイパフォーマンスパワープランで省エネ機能が無効になっている場合がある」良い考えです。ただし、この設定は、電源プランの設定ではなく、スクリーンセーバーの設定のポリシーとして適用されます。「管理者に許可されていないソフトウェアをインストールまたは実行する機能をアンロックしたままにしましたか」通常、そうですが、それらのソフトウェアはポリシーによって強制された設定を変更できません。
anishsane 2015

ビデオの再生中にVLCなどのメディアプレーヤーが使用する画面ロックを防ぐために、Windows APIを知っている人はいますか?
anishsane 2015

回答:


1

キーボードのキーを押すか、マウスを移動/クリックすると、Windowsはアイドルタイマーをリセットします。まったく同じ方法でアイドルタイマーをリセットする、呼び出すことができるWindows API関数があります。この関数を定期的に呼び出すことにより、スクリーンセーバーがアクティブになることはなく、コンピューターがロックされることもありません。これはVLCと他のアプリケーションが行うことです。

関数名はでSetThreadExecutionState、にありますkernel32.dll。VBでは、実際の呼び出しは次のようになります。

SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)

2つの定数は次のとおりです。

ES_SYSTEM_REQUIRED = &H1 そして ES_DISPLAY_REQUIRED = &H2

VBScriptからこれらの呼び出しを行うことはできないため、これをコード化するには、より高度なものが必要です。

ちなみに、上記は技術的に正しい方法です。私がウェブで見たユーティリティの多くは、キーストロークのシミュレーションやマウスの揺れのようなばかげたトリックを使用しています。それはあなたの仕事を妨げる可能性があるので、それは私の意見では悪いです。

とにかく、私はあまりにも脱線しました。この種のものはスタックオーバーフローに属します。


0

あなたは使用することができSetThreadExecutionStateますが、Ctrlキー+ Cと背景との出口で実行できるスタンドアロンPythonアプリケーションの一部として、Pythonのctypesのモジュールによって提供されるように、機能を。(この関数の使い方を説明してくれた@ 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リリースページにアクセスしてください。


1
0プレースホルダーとしてではなく、標準的な方法はpassです。
anishsane 2018

1
また、passではなく、sleep()を保持することをお勧めします。そうしないと、ビジー待機してCPUを消費します。何時間も眠ることができます。
anishsane

0

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

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

キーF13はゲームのオプションを妨げるべきではありません


うーん。働くことができました。
anishsane
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.