System-Sleep verhindern

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

System-Sleep verhindern

Beitrag von Kaeru Gaman »

nach nem Tip von milan hab ich mal ausgefutzelt, wie das funktioniert,
ein aktivieren des bildschirmschoners und der energiesparoptionen zu verhindern.

der code benutzt einen aufruf in der kernel32 lib.
laut MSDN ist minimum win2Kpro.

mit den requester-aufrufen innerhalb der proc ist das natürlich eher ne demo.
vielleicht ist ja es für jemanden nützlich.

Code: Alles auswählen

;****************************************************************************************
;*** prevent sleep-mode
;****************************************************************************************
  #ES_CONTINUOUS        = $80000000 	
  #ES_DISPLAY_REQUIRED  = $00000002 
  #ES_SYSTEM_REQUIRED   = $00000001

Procedure STES_Set( Flag.l )
  If OpenLibrary(0, "kernel32")
    ret = CallFunction(0, "SetThreadExecutionState", Flag )
    If ret = 0
      MessageRequester( "Error", "Lib call Failed" )
    EndIf
    CloseLibrary(0)
  Else
    MessageRequester( "Error", "Lib open Failed" )
  EndIf 
EndProcedure
;****************************************************************************************

; activate
  STES_Set( #ES_CONTINUOUS | #ES_SYSTEM_REQUIRED | #ES_DISPLAY_REQUIRED )

; the rest is only to demonstrate it works

OpenWindow(0, #PB_Ignore, #PB_Ignore, 140, 60, "Keep Awake")
  CreateGadgetList(WindowID(0))
  TextGadget(0, 20, 20, 100, 20, "0000 sec", #PB_Text_Center | #PB_Text_Border )
  timerstart = ElapsedMilliseconds()
Repeat
  EvID = WaitWindowEvent(500)
  Select EvID
    Case #Null
      timer = ( ElapsedMilliseconds() - timerstart ) / 1000
      SetGadgetText(0, RSet(Str(timer),4,"0") + " sec" )
    Case #PB_Event_CloseWindow
      EXIT = 1
  EndSelect
Until EXIT 

; reset executionstate at the and of the program
  STES_Set( #ES_CONTINUOUS )
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag von uweb »

Wenn es nur darum geht die Länge einer Zigarettenpause durch unterdrücken des Bildschirmschoners zu verschleiern könnte auch der Code nützlich sein den ich einmal für eine Freundin geschrieben habe.

Code: Alles auswählen

Define state.l : SystemParametersInfo_(#SPI_GETSCREENSAVEACTIVE,0,@state,0)
If state = #True
  SystemParametersInfo_(#SPI_SETSCREENSAVEACTIVE,0,0,0) 
  MessageRequester("Info", "Bildschirmschoner wurde deaktiviert",#PB_MessageRequester_Ok)
Else
  SystemParametersInfo_(#SPI_SETSCREENSAVEACTIVE,1,0,0)
  MessageRequester("Info", "Bildschirmschoner wurde aktiviert",#PB_MessageRequester_Ok)
EndIf
Wenn das Programm von einem Stick gestartet wird dürfte der Admin es schwer haben dem User irgend einen Vorwurf zu machen, da es keine Spuren gibt.
Antworten