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
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.
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