Standby Modus in einem Programm auch unter Vista verhindern
Manchmal kann man den Standby Mode wirklich nicht gebrauchen. Besonders, wenn man ein Programm hat, dass evtl. viel im Hintergrund mit einer Datenbankverbindung macht.
Wie macht man es unter Windows Vista richtig, denn BROADCAST_QUERY_DENY bei einem PBT_APMQUERYSUSPEND oder PBT_APMQUERYSUSPENDFAILED zurückzugeben funktioniert nicht.
Man muss SetThreadExecutionState verwenden!
Äußerst dumm nur, dass man dies auch wirklich für Windows Vista und Windows 7 berücksichtigen muss. Ich hatte natürlich für Windows 2000 und XP entsprechenden Code vorgesehen, die den Standby verhindern, aber wie schon erwähnt, das geht eben unter Vista nicht mehr.
Es gibt Inkompatibilitäten zwischen des OSen, die man wirklich explizit behandeln muss. Es lohnt sich ein Blick in die Dokus, den ich selber oft genug nicht mache…
// Every 30 secs we disallow the standby and hibernate! // We have to use ES_AWAYMODE_REQUIRED on Vista and Windows Server 2008 // If we allow standby and hibernation we get problems with the DB connection. DWORD dwAwaymodeRequired = 0; OSVERSIONINFO os; ::ZeroMemory(&os,sizeof(os)); os.dwOSVersionInfoSize = sizeof(os); if (::GetVersionEx(&os) && os.dwMajorVersion>=6) dwAwaymodeRequired = ES_AWAYMODE_REQUIRED; VERIFY(::SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | dwAwaymodeRequired));
Themenverwandte Beiträge:
Link für diesen Beitrag | RSS-Feed zu diesem Beitrag
Hinterlassen sie einen Kommentar:
Beachten sie bitte, dass Kommentare evtl. nicht sofort hier erscheinen. Die Kommentare werden zur Moderation an den Webmaster gesendet. Es kann also etwas dauern, bis Ihr Kommentar hier veröffentlicht wird!