Seite 2 von 3
Re: Eneriesparplan Monitor Win7
Verfasst: 07.10.2014 14:55
von _JON_
ts-soft hat geschrieben:Du findest keine Sicherheitslücke in Windows, das wäre dann schon merkwürdig.
Nicht verzagen Google fragen:
Windows 7 UAC whitelist: Code-injection Issue
Funktioniert bei Windows 7 und 8.0, aber nur mit der Standard UAC Einstellung
Re: Eneriesparplan Monitor Win7
Verfasst: 07.10.2014 15:40
von ts-soft
@_JON_
Ich verstehe zwar das ganze englische Zeuchs nicht, aber wie ich UAC austrickse, ist mir bekannt.
Aber was nützt das auf einem Fremdrechner, wo ich eingeschränkte Rechte habe, und darum
geht es doch hier. Wahrscheinlich noch mit Domäne und Active Directory.
Gruß
Thomas
Re: Eneriesparplan Monitor Win7
Verfasst: 07.10.2014 16:03
von _JON_
Hartl hat nie erwähnt das es sich um einen Fremdrechner handelt.
Und eingeschränkte Rechte kann vieles heißen ...
Re: Eneriesparplan Monitor Win7
Verfasst: 07.10.2014 23:31
von Hartl
Da es sich ja bei dem "SystemParametersInfo" um eine API handelt und auf dem eingeschränkten Rechner funktioniert, wollte ich auch die API "PowerSetActiveScheme" einmal ausprobieren.
Eine Mausbewegung zu produzieren um den Standby zu verhindern wollte ich vermeiden, da das "Gezappel" des Mauszeigers bei für manche Tätigkeiten ungeeignet ist.
Könnte mir trotzdem jemand einmal ein Beispiel geben für das "PowerSetActiveScheme".
Grüße
Gerhard
Re: Eneriesparplan Monitor Win7
Verfasst: 08.10.2014 19:15
von Sicro
Versuche es mal damit:
Code: Alles auswählen
; WICHTIG: Die Ausführungen werden nur verhindert, wenn das Programmfenster den Fokus hat
Procedure CBTProc(nCode, wParam, lParam)
If nCode = #HCBT_SYSCOMMAND
If wParam = #SC_MONITORPOWER
Select lParam
Case -1 ; Monitor will sich einschalten
; ProcedureReturn #True ; Ausführung ablehnen
Case 1 ; Monitor will in den Standby-Modus
ProcedureReturn #True ; Ausführung ablehnen
Case 2 ; Monitor will sich ausschalten
; ProcedureReturn #True ; Ausführung ablehnen
EndSelect
ElseIf wParam = #SC_SCREENSAVE ; Bildschirmschoner will sich starten
ProcedureReturn #True ; Ausführung ablehnen
EndIf
EndIf
ProcedureReturn CallNextHookEx_(0, nCode, wParam, lParam)
EndProcedure
Define Hook, Event
Hook = SetWindowsHookEx_(#WH_CBT, @CBTProc(), GetModuleHandle_(0), GetCurrentThreadId_())
If Hook = 0
Debug "Hook konnte nicht gesetzt werden"
EndIf
OpenWindow(0, 0, 0, 400, 400, "Monitor-Standby und Bildschirmschoner verhindern", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
UnhookWindowsHookEx_(Hook)
Beachte den Hinweis oben im Code. Vielleicht kann man diese Einschränkung vermeiden, wenn man die Hook-Procedure in einer DLL auslagert.
Re: Eneriesparplan Monitor Win7
Verfasst: 11.10.2014 21:26
von Hartl
@Sicro
... funktioniert nur zu 50%.
Der Bildschirmschoner bleibt weg, nur der Monitor Standby kommt nach wie vor.

Re: Eneriesparplan Monitor Win7
Verfasst: 11.10.2014 22:04
von Sicro
Ich habe den Code jetzt mal getestet und festgestellt, dass Windows das Ausschalt-Signal sendet.
Entkommentiere den Code bei "Case 2":
Code: Alles auswählen
Case 2 ; Monitor will sich ausschalten
Debug "Monitor will sich ausschalten"
ProcedureReturn #True ; Ausführung ablehnen
So funktioniert es bei mir unter Windows 7.
Re: Eneriesparplan Monitor Win7
Verfasst: 15.10.2014 11:13
von Hartl
Jetzt funktioniert es, den Auskommentierten Text unter Case 2 hatte ich übersehen.
Ich habe noch eine Lösung gefunden die Funktioniert >SetThreadExecutionState<, auch ohne Adminrechte.
Grüße
Gerhard
Verfasst: 15.10.2014 11:25
von CodeCommander
~ DELETE ~
Re: Eneriesparplan Monitor Win7
Verfasst: 15.10.2014 11:28
von RSBasic
Code: Alles auswählen
EnableExplicit
#ES_AWAYMODE_REQUIRED = $00000040
#ES_CONTINUOUS = $80000000
#ES_DISPLAY_REQUIRED = $00000002
#ES_SYSTEM_REQUIRED = $00000001
#ES_USER_PRESENT = $00000004
If OpenLibrary(0, "Kernel32.dll")
Prototype SetThreadExecutionState(esFlags)
Define SetThreadExecutionState.SetThreadExecutionState = GetFunction(0, "SetThreadExecutionState")
CloseLibrary(0)
EndIf
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(1, 10, 10, 200, 20, "Standby-Plan deaktivieren", 0)
ButtonGadget(2, WindowWidth(0)-210, 10, 200, 20, "Standby-Plan aktivieren", 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Debug SetThreadExecutionState(#ES_CONTINUOUS | #ES_SYSTEM_REQUIRED | #ES_AWAYMODE_REQUIRED | #ES_DISPLAY_REQUIRED);Falls 0, dann Fehler
Case 2
Debug SetThreadExecutionState(#ES_CONTINUOUS);Falls 0, dann Fehler
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf