powrprof.dll - Standby - Hänger

Anfängerfragen zum Programmieren mit PureBasic.
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

powrprof.dll - Standby - Hänger

Beitrag von Ractur »

Hallo,

ich versetzte den PC mit folgendem Code in den Standby Modus:

Code: Alles auswählen

If OpenLibrary(0,"powrprof.dll") And GetFunction(0,"SetSuspendState") 
CallFunction(0,"SetSuspendState",#False,#True,#False) 
CloseLibrary(0)
EndIf
Das erste mal funktioniert das Wunderbar, der PC fährt runter und lässt sich ohne Probleme wieder erwecken! Das zweite mal funktioniert es auch, doch dann bleibt er im Standby hängen.

Das heisst, wenn ich Ihn aus den Standby erwecke, verfällt er sofort wieder ins Standby. Muss ich da noch was "verändern" oder anders setzten damit das auch beim 2ten 3ten .... mal funktioniert?

Grüsse und Danke, Matthias

[P.s. wenn ich den PC mit der Funktionseigenen Standby ins Standby versetzte funktioniert das, auch wenn ich es 100 mal mache ;))
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Beitrag von Ractur »

Habe gerade was merkwürdiges bemerkt! Laufen denn im Standby Modus die Programme weiter? :? Ich hab gedacht im Standby Modus werden die Programme quasi gestoppt, oder laufen die im Ram einfach weiter?

Grüsse und Danke! Matthias

Edit: Ich habe es soeben nochmal geprüft. das Programm zählt im Standby Modus dennoch weiter :o

Code: Alles auswählen

#IdleTime_SampleTime = 1000 ; Abtastzeit in ms
Procedure IdleTime() ; Idle Time in ms
  Protected i.l, NewMousePos.POINT
  Static LastInputTrue.l
  Static IdleTime.l
  Static LastMousePos.POINT
  Static hMutex.l
  Static Init.l
 
  If Init = 0
     hMutex = CreateMutex_(#Null, #False, #Null )
     LastInputTrue = ElapsedMilliseconds()
     Init = 1
   EndIf
   
   WaitForSingleObject_(hMutex,#INFINITE) ; wait until object is available

  ;Check mouse movement
  GetCursorPos_(NewMousePos)

 
  If ((NewMousePos\x <> LastMousePos\x) Or (NewMousePos\y <> LastMousePos\y))
     LastMousePos\x = NewMousePos\x
     LastMousePos\y = NewMousePos\y
     LastInputTrue = ElapsedMilliseconds()
  Else ;Check keys state
     For i = 0 To 255
       If (GetAsyncKeyState_(i) & $8001) <> 0
           LastInputTrue = ElapsedMilliseconds()
           Break
       EndIf
     Next i
   EndIf 
   
   IdleTime = (ElapsedMilliseconds() - LastInputTrue)
  ReleaseMutex_(hMutex)
  ProcedureReturn IdleTime
EndProcedure
Procedure IdleTime_Thread(IdleTime_Delay.l)
   Repeat
      IdleTime()
      Delay(IdleTime_Delay)
   ForEver
EndProcedure
CreateThread(@IdleTime_Thread(),#IdleTime_SampleTime)
Allerdings frage ich mich nun, wie kann ich das verhindern? Wie kann ich feststellen ob der PC gerade WACH oder im Standby-Modus ist, gibts da ne Art Befehel? lol, so n Problem hat ich auch noch nie, feststellen pb der PC im Standby ist oder ob er läuft :lol:

Wäre fpr jeden Denkanstoss dankbar,

Grüsse Matthias
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Beitrag von Ractur »

Falls es noch jemanden interessiert, habe nun mit:

Code: Alles auswählen

  PauseThread(number)
  If OpenLibrary(0,"powrprof.dll") And GetFunction(0,"SetSuspendState") 
  CallFunction(0,"SetSuspendState",#False,#True,#False) 
  CloseLibrary(0)
EndIf 
geschafft den Counter anzuhalten bevor der PC in den Standby fällt!

Was mich aber wundert, wenn der PC aus dem Standby kommt, läuft der Theard wieder weiter als ob er nie gestoppt worden wäre! Normalerweise müsste ich doch ResumeTheard(number) machen!

Brauch ich aber nicht, hmmm, Problem ist somit gelöst, allerdings weiss ich nicht wieso der Theard nicht PAUSED bleibt wenn der PC aus dem Standby kommt. Normal müsste der Theard doch PAUSED bleiben.

Gut Problem gelöst, neues "Problem" geschaffen lol, ich mein es ist optimal nun so, dennoch versuch ich zu verstehen warum der Theard nun weiter läuft ohne ein ResumeTheard.....

Jaja schlagt mich, ich versuche ja nur den Computer zu verstehen :lol:

Grüsse Matthias
Ractur, der mit dem Programmierstil der 80er Jahre :D
Antworten