Verhindern Sie die Windows-Bildschirmsperre, wenn Sie mit dem Joystick spielen


12

Mein Windows 7-System ist so eingestellt, dass der Bildschirm nach 20 Minuten Inaktivität gesperrt wird (dies ist eine vom Arbeitsplatz erzwungene Richtlinie; ich kann diese Einstellung nicht ändern).

Wenn ich die Tastatur / Maus verwende, behandelt Windows sie als Benutzereingaben, und der Bildschirm bleibt somit entsperrt. Wenn ich jedoch ein Spiel nur mit einem Joystick spiele, behandelt Windows dies als keine Aktivität, und daher wird der Bildschirm nach dem Timeout gesperrt.

Gibt es eine Möglichkeit, die Bildschirmsperre bei der Verwendung von Joystick-basierten Spielen zu verhindern?

Um dieses Problem zu umgehen, spiele ich derzeit ein zufälliges Video (stummgeschaltet) im Hintergrund mit VLC ab, wodurch die Bildschirmsperre verhindert wird. Aber es sollte einen besseren Weg geben, um dieses Problem zu lösen ...

Ich könnte möglicherweise ein Skript schreiben, das einige Tastenanschläge wie {NUMLOCK}{NUMLOCK}via simuliert sendkeys. Es besteht jedoch immer die Möglichkeit eines unbeabsichtigten Nebeneffekts, z. B. die Verhinderung, dass ich diese Schlüssel in meinen Spieloptionen verwende.


Ja, es kann auf die von Ihnen vorgeschlagene Weise erreicht werden. Aber haben Sie geprüft, ob Sie Strompläne wechseln können? (Anstatt die Energieplaneinstellungen zu ändern.) Manchmal sind bei Energiesparfunktionen für Hochleistungsstrompläne die Energiesparfunktionen deaktiviert. Und außerdem: Wenn sie Ihre Energieplaneinstellungen gesperrt haben, haben sie dann die Möglichkeit, Software zu installieren oder auszuführen, die nicht von Administratoren autorisiert wurde, freigeschaltet?
Miroxlav

"Manchmal sind bei Energiesparfunktionen für Hochleistungs-Energiesparfunktionen deaktiviert." Gute Idee. Diese Einstellung wird jedoch als Richtlinie in den Bildschirmschonereinstellungen und nicht in den Energieplaneinstellungen durchgesetzt. "Haben sie die Möglichkeit, Software zu installieren oder auszuführen, die nicht von Administratoren autorisiert wurde, nicht aktiviert?" Im Allgemeinen ja, aber diese Software kann die durch Richtlinien erzwungenen Einstellungen nicht ändern.
Anishsane

Kennt jemand eine Windows-API, um die Bildschirmsperre zu verhindern, die Media Player wie VLC beim Abspielen von Videos verwenden?
Anishsane

Antworten:


1

Immer wenn Sie eine Taste auf der Tastatur drücken oder die Maus bewegen / klicken, setzt Windows den Leerlauf-Timer zurück . Sie können eine Windows-API-Funktion aufrufen, die den Leerlauf-Timer genauso zurücksetzt. Wenn Sie die Funktion in regelmäßigen Abständen aufrufen, wird der Bildschirmschoner niemals aktiviert und der Computer wird niemals gesperrt. Dies ist, was VLC und andere Anwendungen tun.

Der Funktionsname ist SetThreadExecutionStateund befindet sich in kernel32.dll. In VB sieht der eigentliche Anruf folgendermaßen aus:

SetThreadExecutionState(ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED)

Die zwei Konstanten sind:

ES_SYSTEM_REQUIRED = &H1 und ES_DISPLAY_REQUIRED = &H2

Sie können diese Aufrufe nicht über VBScript ausführen, daher benötigen Sie etwas Fortgeschritteneres, um dies zu codieren.

Im Übrigen ist das oben Genannte der technisch korrekte Weg, dies zu tun. Viele Dienstprogramme, die ich im Internet gesehen habe, verwenden alberne Tricks wie das Simulieren von Tastenanschlägen oder das Wackeln der Maus. Das ist meiner Meinung nach schlecht, da es Ihre Arbeit beeinträchtigen kann.

Wie auch immer, ich habe zu viel abgeschweift. Diese Art von Sachen gehört zu Stack Overflow.


0

Sie können die SetThreadExecutionStatevom Python-Modul ctypes bereitgestellte Funktion als Teil einer eigenständigen Python-Anwendung verwenden, die Sie im Hintergrund ausführen und mit Strg + C beenden können. (Dank der Antwort von @ misha256 für die Erklärung der Verwendung dieser Funktion!)

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

Ich habe dieses Skript für Windows erstellt. Besuchen Sie die GitHub-Release-Seite hier .


1
Anstelle 0als Platzhalter ist der Standardweg pass.
Anishsane

1
Es ist auch besser, etwas Schlaf () zu behalten, als zu passen. Andernfalls wird die CPU ausgelastet und verbraucht. Sie können dort sogar stundenlang schlafen.
Anishsane

0

Führen Sie einfach eine Datei mit dem Namen : no_sleep.vbs. Diese Textdatei no_sleep.vbssollte den folgenden Text enthalten.
Bitte googeln Sie, wenn Sie nicht wissen, wie Sie eine leere Textdatei erstellen und deren Erweiterung umbenennen können.

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

Die Taste F13 sollte die Spieloptionen nicht beeinträchtigen


Hmm. Könnte klappen.
Anishsane
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.