Wie kann ich wissen, wenn Windows in den/aus dem sleep-oder Hibernate-Modus?
Ist es möglich, zu abonnieren, um ein Windows-Ereignis, das ausgelöst wird, wenn Windows geht in die oder kommt aus dem Schlaf-oder Ruhezustand?
Muss ich meine Bewerbung aufmerksam gemacht werden, wenn der computer schlafen gehen zu tun, etwas Aufräumen und vermeiden Sie timing-Probleme, wenn es aus dem Schlaf.
- Für neue Leser - Hinweis, dass es einen neuen S0-power-Modus Stand (Modern Standby), für die alle Lösungen, die hier vorgeschlagen wird nicht funktionieren: docs.microsoft.com/en-us/windows/desktop/power/... (aktualisiert eine Antwort, sobald ich Sie bekommen)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Microsoft.Win32.SystemEvents.PowerModeChanged
Ereignis wird, geben Sie diese Informationen. Dieses Ereignis ist in allen Varianten .NET framework von Microsoft freigegeben, so weit.In .NET, verwenden Sie die PowerModeChanged Veranstaltung.
In Win32, nutzen Sie die WM_POWERBROADCAST Nachricht.
Können Sie überwachen Win32_PowerManagementEvent WMI-Ereignis
Nicht sicher, wie oft Sie wollen, um das zu überwachen, aber wenn Sie schreiben einen Dienst in .NET können Sie überschreiben ServiceBase, set CanHandlePowerEvent zu wahren, und dann werden Sie benachrichtigt, der macht Veränderungen durch die PowerBroadcastStatus enumeration.
In einer Visual Studio 2005 C++ - MFC Anwendung, die Sie hinzufügen müssen, um eine
ON_MESSAGE()
auf Ihre Nachricht anzeigen, suchen für dieWM_POWERBROADCAST
Meldung wie in diesem Beispiel:Dann müssen Sie fügen Sie den message-handler-Funktion, zusammen mit der definition der Klasse ändern zu erklären, dass die member-Funktion für den message-handler, so dass Sie überprüfen können, die
wParam
variable für die Art der Meldung, wie in diesem Skelett:Was ich gesehen habe, dass ein test unter Verwendung der oben in einer Anwendung, die auf Windows 7, der im debugger gestartet, und dann habe ich manuell machen, mein PC läuft die Anwendung, um zu Schlafen sehe ich die folgende Meldung:
Dann, wenn der PC neu gestartet wird und ich sign-in was werde ich sehen, in der debugger-Ausgabefenster sind zwei Nachrichten, eine nach der anderen:
Alles, was ich gefunden habe bisher zeigt, dass Sie keinen Hinweis darauf, ob Sie aus einem Ruhezustand oder Ruhezustand. Ich mache noch weitere Forschung auf, was getan werden muss, wenn die Aussetzung oder bei der Wiederaufnahme so weit wie Datei-und device-handles. Ich habe gesehen, Hinweise darauf, dass die Datei verarbeitet, um die COM-ports sind nicht mehr gültig, nachdem die Wiederaufnahme. Ich bin auch nicht sicher über Schnittstellen zu anderen Prozessen zum Beispiel Datenbank-verbindungen.
Zusätzlich zu den standard-Standbymodus und Ruhezustand power-management-Staaten, die Microsoft eingeführt hat, Connected-Standby-power-Zustand mit Windows 8 und 8.1 die einige application design Verzweigungen abhängig von der Art der Anwendung.
Die Kunst der dankbaren Anwendung Aufhängung von Lynn Merrill von Intel hat einige Informationen über die Handhabung der verschiedenen Windows-message-Typen im Zusammenhang mit Power-Management unter Windows ist es jedoch Datum 2005, so dass nicht alle Materialien können beziehen sich auf Windows nach Windows XP. Es ist mindestens eine nicht mehr verwendete Nachricht in der Reihenfolge beschrieben, in diesem Dokument als, beginnend mit Windows Vista die
PBT_APMQUERYSUSPEND
Nachricht, mit der Anfrage, ob eine Anwendung in der Lage war, zu sistieren, ist von Windows nicht mehr verwendet. DieSetThreadExecutionState()
Funktion wird jetzt verwendet, um anzuzeigen, dass ein thread kann nicht unterbrochen werden, mit einem Wechsel in den Energiesparmodus oder Ruhezustand. Siehe die Antworten bei stackoverflow Kann nicht fangen sleep-anhalten von Nachrichten (winxp) für details auf Power-Management-Status-Nachricht verpasst.Abonnieren Sie NetworkChange.NetworkAvailabilityChanged und NetworkChange.NetworkAddressChanged.
Ich in der Regel starten Sie eine zwei-Sekunden-timer, so dass ich wieder aufnehmen kann, die Kommunikation über das Netzwerk, nachdem Sie in Schlaf-Modus, wenn es mal aus.