Wie Sie erkennen können, ob Windows das Herunterfahren oder den Neustart
Ich weiß, dass, wenn Windows heruntergefahren wird, sendet er eine WM_QUERYENDSESSION Nachricht an jede Anwendung. Dies macht es leicht zu erkennen, wenn Windows heruntergefahren wird. Jedoch ist es möglich, zu wissen, wenn den computer gehen, um power-off oder ist es neu starten, nachdem Sie Windows Herunterfahren.
Ich bin nicht besonders optimistisch, betrachtet man die Dokumentation auf MSDN hat dies zu sagen über WM_QUERYENDSESSION
: "...ist es nicht möglich zu bestimmen, welches Ereignis Auftritt," aber die kumulative Intelligenz der stackoverflow hört nie auf, mich zu überraschen.
InformationsquelleAutor Andrew Garrison | 2009-06-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom hier:
Etwas von einer Kreisverkehr-Lösung, aber es sollte den trick tun.
1, Weil die Antwort ist unvollständig und speziell auf Windows-Explorer. Es scheint auch zu sein, beseitigt in Windows 7.
Es funktioniert gut unter Windows XP, aber nicht unter Windows7
InformationsquelleAutor Eric Petroelje
In Windows 7 (und vermutlich auch in Vista /8 /Server) du könntest die system-Ereignisse zu verfolgen, ob Windows Herunterfahren (und ausschalten der computer) oder einfach nur Neustart. Jedes mal, wenn ein shutdown/reboot initiiert wird (mit allen Mitteln - ein Klick auf die Schaltfläche im Menü Start, oder programmgesteuert), Windows 7, schreibt ein oder zwei Ereignisse im System-log, Quelle USER32, Ereignis-ID 1074. Sie können diese Ereignisse aufgezeichnet, wenn Sie öffnen Sie die Ereignisanzeige unter Verwaltung (filter System-log, um zu sehen, nur die ID 1074). Die Beschreibung (Nachricht) von diesen Ereignissen enthält die Abschaltung Typ. So könnten Sie analysieren die Beschreibung der letzten Veranstaltung dieser Art (nach dem shutdown initiiert wurde), suchen Sie das gewünschte Wort (Herunterfahren, neu starten/neu starten).
Ich nicht versuchen, um zu sehen, der shutdown-Typ geschrieben, im Falle, wenn mit der power-Taste ordnungsgemäß Herunterfahren von Windows (ich in der Regel deaktivieren Sie diese Funktion), aber einige Website legt nahe, dass Staaten eine "power-off" - Typ anstelle von "shutdown" - so check it out, wenn Sie brauchen, um sicher zu sein. Oder schauen Sie einfach für einen "Neustart" geben - wenn es nicht gefunden wird, dann "Herunterfahren" - Typ ausgegangen.
In Windows XP, aus meiner Erfahrung, ein Ereignis 1074 wird nur aufgezeichnet, wenn sich der shutdown/reboot erfolgt programmgesteuert (z.B. während ein Programm installieren oder verwenden der shutdown.exe Dienstprogramm). So ist es nicht registrieren, das Herunterfahren initiiert von der shell (Explorer), aber vielleicht könnten Sie kombinieren diese Methode mit dem Lesen der Wert aus der Registrierung, wie vorgeschlagen, eine andere Antwort. Beachten Sie auch, dass in WinXP die Meldung von Ereignis 1074 enthält das Wort "neu starten" egal was passiert, die wahre Art der Abschaltung ist, so sollten Sie sich die "Shutdown" - Typ:" - Feld, wird der Zustand entweder "Herunterfahren" oder "Neustart".
In diesem Zusammenhang ein Ereignis-ID 1073 aufgenommen wird, wenn Windows nicht Herunterfahren/neu starten aus irgendeinem Grund (z.B. wenn eine Anwendung nicht erlauben die Abschaltung als eine Reaktion auf WM_QUERYENDSESSION). In diesem Fall enthält die Nachricht auch Worte wie "shutdown", "reboot" oder "power off" - in WinXP. Für Win7 diese Art von Veranstaltung ist weniger nützlich, in unserem Fall, da es nicht einen Unterschied machen zwischen shutdown und reboot. Aber für WinXP, wenn Sie nur zum abfangen der shutdown/reboot, einige Aktionen, dann setzen Sie die entsprechenden shutdown oder Neustart-Prozess - es sollte funktionieren wie erwartet.
InformationsquelleAutor Danath
Einen trick, der meistens funktioniert, ist, Falle
WM_ENDSESSION
und melden Sie es. Jetzt verfolgen Sie die Zeit. Wenn das system kommt wieder hoch, innerhalb einer angemessenen peroid (etwa 5 Minuten). Dass war dann ein reboot, kein shutdown.Idee: Wenn das system kommt wieder hoch innerhalb von 5 Minuten, tut es wirklich egal, ob der Benutzer geklickt 'Herunterfahren' oder 'Neustarten'?
Wenn Sie wirklich brauchen, zu erkennen, dass eine Abschaltung (und der einzige Grund, warum ich glauben, Sie müssten dies tun, wenn Sie abhängig von einer obskuren Verhaltens-software Unterschied zwischen einem shutdown-vs einem Neustart) könnte man untersuchen
API hooking
vonExitWindowsEx
- und Verwandte Funktionen, aber ich weiß nicht empfehlen, diesen Ansatz. Überdenken, wenn Sie wirklich brauchen, um dies zu erkennen direkt.Mit modernen ACPI power-management: Schlaf, Hibernate, Wake-On-LAN, und so weiter. Die definition von reboot (oder Warmstart) ist immer schwer zu definieren. Was die meisten Menschen meinen, durch Neustart (oder nahe genug) ist, dass das system nicht in einem normalen Zustand für eine sehr kurze Zeit - Zeit.
InformationsquelleAutor unixman83
Möglich experimentelle Lösung für Windows7 könnte die folgende sein. (Ich bin mir nicht sicher, ob dies funktioniert auch mit anderen Sprachen, von daher würde ich es nennen einen workaround)
Folgende ist ein Beispiel der XML, die in das Ereignisprotokoll geschrieben, wenn ein PC neu gestartet:
InformationsquelleAutor conceptacid