Eneriesparplan Monitor Win7

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Eneriesparplan Monitor Win7

Beitrag 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
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Eneriesparplan Monitor Win7

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Eneriesparplan Monitor Win7

Beitrag von _JON_ »

Hartl hat nie erwähnt das es sich um einen Fremdrechner handelt.
Und eingeschränkte Rechte kann vieles heißen ...
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Hartl
Beiträge: 10
Registriert: 20.02.2013 20:48
Computerausstattung: Win 7 x64 | Win 8.1

Re: Eneriesparplan Monitor Win7

Beitrag 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
PureBasic 5.30 x86 / x64 ( Win 7 x64 SP1 | Win 8.1 )
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Eneriesparplan Monitor Win7

Beitrag 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.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Hartl
Beiträge: 10
Registriert: 20.02.2013 20:48
Computerausstattung: Win 7 x64 | Win 8.1

Re: Eneriesparplan Monitor Win7

Beitrag von Hartl »

@Sicro
... funktioniert nur zu 50%.
Der Bildschirmschoner bleibt weg, nur der Monitor Standby kommt nach wie vor. :cry:
PureBasic 5.30 x86 / x64 ( Win 7 x64 SP1 | Win 8.1 )
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Eneriesparplan Monitor Win7

Beitrag 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.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Hartl
Beiträge: 10
Registriert: 20.02.2013 20:48
Computerausstattung: Win 7 x64 | Win 8.1

Re: Eneriesparplan Monitor Win7

Beitrag 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. :D

Grüße
Gerhard
PureBasic 5.30 x86 / x64 ( Win 7 x64 SP1 | Win 8.1 )
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:38, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Eneriesparplan Monitor Win7

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten