Notebook : Deckel "zu" -> Standby

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Notebook : Deckel "zu" -> Standby

Beitrag von AUGE_OHR »

hi,

üblicherweise stelle ich die "Energie Verwaltung" auf "full Power" und lasse ihn auch nicht die Netzwerkkarte "abschalten".

Nun gibt es ja, bei Notebook´s, oft die Option zu definieren was passieren soll, wenn man den "Deckel zumacht".
Wenn man ihm sagt "runter-fahren" ist das wohl ein WM_QUIT und die Xbase++ Application kann darauf "reagieren", aber was ist mit "Standby" ?

kann man, und wenn wie, auf ein "Standby" reagieren ?
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Notebook : Deckel "zu" -> Standby

Beitrag von Tom »

Hallo, Jimmy.

Es wird ein WMI-Event ausgelöst, auf das Du reagieren kannst. Du müsstest also in Deinem Eventhandler ständig abfragen, ob "suspend" oder "hibernate" ausgelöst werden. Schau Dir mal das VB-Beispiel hier an (dritter Beitrag):

http://www.pcreview.co.uk/forums/thread-434504.php
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Notebook : Deckel "zu" -> Standby

Beitrag von AUGE_OHR »

hi,
Tom hat geschrieben:Es wird ein WMI-Event ausgelöst, auf das Du reagieren kannst. Du müsstest also in Deinem Eventhandler ständig abfragen, ob "suspend" oder "hibernate" ausgelöst werden. Schau Dir mal das VB-Beispiel hier an (dritter Beitrag):
http://www.pcreview.co.uk/forums/thread-434504.php
Danke für den Hinweis.
Ich habe ja eine WMI "Generator" der mir das erzeugt:

Code: Alles auswählen

#include "common.ch"
#include "os.ch"
#define CRLF CHR(13)+CHR(10)

#PRAGMA LIBRARY("ASCOM10.LIB")

STATIC lVISTA := .F.

PROCEDURE Main(strComputer,cUser,cPassword)
LOCAL objWMIService
LOCAL colItems
LOCAL cText
LOCAL cName
LOCAL bCollBlock
LOCAL i,iMax
LOCAL j,jMax
LOCAL aitem := {}
LOCAL aProp := {;
"EventType",;
"OEMEventCode",;
"SECURITY_DESCRIPTOR" }

DEFAULT strComputer TO "Localhost"
DEFAULT cUser       TO "Administrator"
DEFAULT cPassword   TO ""

   CLS

   SET ALTER TO Win32_PowerManagementEvent.TXT
   SET ALTER ON

   IF "VISTA" $ OS(OS_PRODUCT) .OR. "WIN2003" $ OS(OS_PRODUCT) .OR. "WIN2008" $ OS(OS_PRODUCT)
      lVISTA := .T.
   ENDIF
   IF lVISTA
      IF strComputer == "Localhost"
         objWMIService  := CreateObject( "WbemScripting.SWbemLocator" ):ConnectServer(strComputer, "Root\CIMv2")
      ELSE
         IF EMPTY(cPassword)
            MSGBOX("Need Password")
            QUIT
         ELSE
            objWMIService  := CreateObject( "WbemScripting.SWbemLocator" ):ConnectServer(strComputer, "Root\CIMv2",strComputer+"\"+cUser,cPassword)
         ENDIF
      ENDIF
   ELSE
      objWMIService  := GetObject("WinMgmts:{impersonationLevel=impersonate}\\"+strComputer+"\Root\CIMv2") 
   ENDIF

   colItems       := objWMIService:ExecQuery("select * from Win32_PowerManagementEvent",,48)
   bCollBlock     := {|oService,n| AADD(aItem,{ n,;
     oService:getProperty("EventType"),;
     oService:getProperty("OEMEventCode"),;
     oService:getProperty("SECURITY_DESCRIPTOR") })}

   ComEvalCollection(colItems, bCollBlock )

   IF LEN(aItem) > 0
      ? jMax := LEN(aItem)
      ? iMax := LEN(aItem[1])
?"*****************************************************************************"
      FOR j := 1 TO jMax
         FOR i := 1 TO iMax-1
            ? SUBSTR(aProp[i]+SPACE(40),1,40)+":",aItem[j,i+1]
         NEXT

?"*****************************************************************************"

      NEXT
   ELSE
      MSGBOX("no Property found ?")
   ENDIF

   SET ALTER OFF
   SET ALTER TO

   Runshell("Win32_PowerManagementEvent.TXT","Notepad.exe",.T.)

RETURN
Problem : "no Property found ?"
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Notebook : Deckel "zu" -> Standby

Beitrag von AUGE_OHR »

hi,

ein Event ist ja nicht wie eine Property "ständig" erreichbar, deshalb funktioniert meine WMI Routine "so" nicht.
ich müsste das ganze wohl in die DO WHILE Schleife einbinden umden Event zu "erwischen".

nun habe ich weiter geforscht und bin auf WM_POWER bzw WM_POWERBROADCAST gestossen.
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Frage : wie bekomme ich den Callback dafür hin ?

Code: Alles auswählen

LRESULT CALLBACK WindowProc(
  HWND   hwnd,    // handle to window
  UINT   uMsg,    // WM_POWERBROADCAST
  WPARAM wParam,  // power-management event
  LPARAM lParam   // function-specific data
);
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Notebook : Deckel "zu" -> Standby

Beitrag von brandelh »

Hi,

trifft das nicht das was du suchst (Auszug aus Hilfe-PDF):
XppApplication()
Slot: :systemPowerStatus := {| nChange, uNIL, self | ... } --> nResponse
Methode: :systemPowerStatus( <nChange> ) --> nResponse
Parameter
<nChange>
<nChange> ist ein numerischer Wert mit Informationen über die Art der Statusänderung. Die diesem Parameter zugewiesenen Werte sind in der folgenden Tabelle zusammengefasst.
Werte für Parameter <nChange>
Energiestatusänderung Wert und Bedeutung
Aufforderung zum Wechsel Das System benötigt die Erlaubnis in den Ruhezustand zu
wechseln. <nChange> enthält 0 oder 1.
Wechsel in den Ruhezustand Der Computer ist dabei, in den Ruhezustand zu wechseln.
<nChange> enthält 4 oder 5.
Wechsel aus Ruhezustand Der Computer wird nach Ruhezustand wieder ausgeführt.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Notebook : Deckel "zu" -> Standby

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben:trifft das nicht das was du suchst (Auszug aus Hilfe-PDF):
XppApplication()
Slot: :systemPowerStatus := {| nChange, uNIL, self | ... } --> nResponse
Methode: :systemPowerStatus( <nChange> ) --> nResponse
Man oh man ... klar hast du völlig Recht =D> die SL1 hat ja den Slot schon.
gruss by OHR
Jimmy
Antworten