Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Umgehen der "Zeitscheibe" in Windows bei aktivem Cortex-XDR

Begonnen von Debus, Dezember 16, 2025, 13:06:30

⏪ vorheriges - nächstes ⏩

Debus

Hey wir haben hier auf der Arbeit Cortex-XDR laufen und recht scharf eingestellt. Nun will ich aber wenn möglich die Windows Zeitscheibe umgehen, also wenn man an dem PC nichts macht, das man nicht immer wider ein PW eingeben muss.
Simulierte Mausbewegung könnte / wird wahrscheinlich auffallen.

Nun würde ich das gerne mit folgendem Code in einer WordDatei machen. Hat hier einer Erfahrung, ob das auch auffallen würde, da eine standart API genutzt wird, und diese eigentlich bei Cortex-XDR funtkionieren sollen.

Hier mal der Code

    Private Declare PtrSafe Function SetThreadExecutionState Lib "kernel32" (ByVal esFlags As Long) As Long


Const ES_CONTINUOUS As Long = &H80000000
Const ES_SYSTEM_REQUIRED As Long = &H1
Const ES_DISPLAY_REQUIRED As Long = &H2

Sub KeepAwakeStarten()
    SetThreadExecutionState ES_CONTINUOUS Or ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED
    Application.OnTime Now + TimeValue("00:00:01"), "KeepAwake" 
End Sub

Sub KeepAwake()
    SetThreadExecutionState ES_CONTINUOUS Or ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED
    Application.OnTime Now + TimeValue("00:01:00"), "KeepAwake"
End Sub

Sub KeepAwakeStoppen()
    On Error Resume Next
    Application.OnTime Now + TimeValue("00:01:00"), "KeepAwake", , False 
    SetThreadExecutionState 0 
End Sub


Danke
Holger


PhilS

Zitat von: Debus am Dezember 16, 2025, 13:06:30Nun würde ich das gerne mit folgendem Code in einer WordDatei machen. Hat hier einer Erfahrung, ob das auch auffallen würde, da eine standart API genutzt wird, und diese eigentlich bei Cortex-XDR funtkionieren sollen.
Interessante Idee.
Ich denke nicht, dass das als verdächtig auffallen würde. Der Ansatz ist der legitime Weg um Abschalten/Sleep von Display und Rechner zu unterbinden, wenn z.B. Videos abgespielt werden.

Es könnte sein, dass du dir die wiederholten Aufrufe von SetThreadExecutionState sparen kannst. Wenn ich die Doku richtig verstehe, sollte mit ES_CONTINUOUS der Zustand bestehen bleiben bis er explizit zurückgesetzt wird.

PS: Ich habe den Thread nach Microsoft Word verschoben. - Passt jetzt auch nicht perfekt, aber IMO besser als Smalltalk.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Debus

Hallo Phil,
danke für den Hinweis, und ich habe es auch nochmal angepasst, aber ich habe hier mal nachgelesen, und das hier noch gefunden

ZitatWarum ganz ohne Wiederholung nicht sinnvoll ist
Ohne Timer oder Schleife würde der Code nur einmal SetThreadExecutionState aufrufen; je nach Windows-/Policy-Konfiguration kann der Rechner dennoch nach der normalen Inaktivitätszeit sperren oder schlafen.
Darum ist ein wiederholter Aufruf (egal ob via OnTime, Schleife oder externem Tool wie PowerToys Awake) die zuverlässigere Lösung.

Daher habe ich den Code nochmal umgestellt

Option Explicit


    Private Declare PtrSafe Function SetThreadExecutionState Lib "kernel32" (ByVal esFlags As Long) As Long


Const ES_CONTINUOUS As Long = &H80000000
Const ES_SYSTEM_REQUIRED As Long = &H1
Const ES_DISPLAY_REQUIRED As Long = &H2

Private mKeepAwake As Boolean

Sub KeepAwakeStarten()
    mKeepAwake = True
    Do While mKeepAwake
        SetThreadExecutionState ES_CONTINUOUS Or ES_SYSTEM_REQUIRED Or ES_DISPLAY_REQUIRED
        WaitSeconds 59
    Loop
End Sub

Sub KeepAwakeStoppen()
    mKeepAwake = False
    SetThreadExecutionState 0
End Sub

Private Sub WaitSeconds(ByVal Sek As Long)
    Dim t As Single
    t = Timer + Sek
    Do While Timer < t
        DoEvents
    Loop
End Sub

Ich bin zu Zeit allerdings noch nicht wieder auf der Arbeit, daher kann ich es erst wegen Cortex im neuen Jahr testen, aber vielleicht kann ja sonst noch einer was dazu sagen, vor allem ob Cortex zuschlagen würde

Danke
Holger