Jump to content

Feature Request: Ruhezustand verhindern während Aufnahme


Shivan

Recommended Posts

Posted

Mir passiert es ab und zu, dass ich aus versehen meinen PC in den Ruhezustand versetze, obwohl der Recording-Service noch etwas aufnimmt...

 

Und dann ist die Aufnahme eben leider abgebrochen.

 

Ich würde mich riesig über ein Feature freuen, dass sich der Recording-Service meldet und mich fragt, ob ich wirklich in den Ruhezustand möchte.... mf_laughbounce2.gif

Posted

Installiere dir XP, da ist das genau so. In den neueren Windows Versionen ist das nicht mehr möglich. Da Microsoft der Meinung ist das der Nutzer weiß was er tut und Programme den Wunsch des Nutzers nicht verhindern sollen. Nur der Standby Wunsch kann auf den Awaymode umgebogen werden.

Posted

HI,

 

sowas in der Art funktioniert nicht oder (habs nicht ausprobiert):

// Set new state to prevent system sleep (note: still allows screen saver)

m_previousExecutionState = NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED);

Posted

Nein, funktioniert nicht.

 

ES_SYSTEM_REQUIRED und ES_CONTINUOUS verwendet der DVBViewer. Es verhindert, dass Windows aufgrund eines Idle-Timeouts (= keine Benutzer-Interaktionen während der in den Energie-Optionen konfigurierten Zeitspanne) automatisch in Standby oder den Ruhezustand herunterfährt. Ein vom Benutzer direkt ausgelöstes Herunterfahren in den Ruhezustand findet jedoch unvermeidlich statt.

 

Weiterhin verwendet der DVBViewer ES_AWAYMODE_REQUIRED. Es bewirkt, dass ein vom Benutzer ausgelöstes Herunterfahren in Standby bei laufenden Aufnahmen in den Abwesenheitsmodus umgebogen wird (System und Festplatte bleiben aktiv, Monitor- und Soundkarte werden abgeschaltet). Auch dies greift nicht in den Ruhezustand ein.

Posted (edited)

Ein vom Benutzer direkt ausgelöstes Herunterfahren in den Ruhezustand findet jedoch unvermeidlich statt.

 

Und das ist auch gut so. Ich hasse das, wenn eine Anwendung der Meinung ist, irgendetwas verhindern zu müssen oder eigenmächtig irgendwelche Energie-Optionen in Windows manipuliert.

 

Ich würde empfehlen, auf dem Desktop ein Standby-Script (z.B. ein AutoIt-Script) zu verlinken. Das Script kann per HTTP-Request abfragen, ob der Recservice gerade aufnimmt, ein Client verbunden ist oder sonstwas macht. Im Prinzip reicht dafür auch ein kleines CMD-Script unter Verwendung von WGET oder CURL, FIND und SHUTDOWN.

 

Wenn das nicht der Fall ist, führt es den Standby aus, ansonsten eben nicht.

 

Bedingt natürlich, dass der Benutzer konsequent immer das Script für den Standby verwendet und nicht die Funktion im Startmenü von Windows.

Edited by dbraner
Posted
Und das ist auch gut so. Ich hasse das, wenn eine Anwendung der Meinung ist, irgendetwas verhindern zu müssen

Sonderbar ist irgendwie, dass eine Anwendung unter Windows 7 ein manuelles Herunterfahren des PC in den S5 (Soft-Off) wie gehabt aufhalten kann, indem sie WM_QUERYENDSESSION mit 0 beantwortet. Unter XP passiert dann einfach gar nichts. Unter Windows 7 erscheint dieser Vollbild-Dialog mit einer Nachfrage. Neu ist gegenüber XP auch, dass die Anwendung einen Grund angeben kann, der in dem Vollbild-Dialog angezeigt wird. Wie Windows das genau handhabt, ist hier aufgelistet.

 

Es gibt ja tatsächlich Situationen, in denen ein PC nicht runterfahren sollte. Zum Beispiel, wenn eine CD/DVD gebrannt wird. Warum Windows 7 speziell den manuell ausgelösten Ruhezustand so rigoros durchzieht, wird nicht wirklich klar.

Posted (edited)

Sonderbar ist irgendwie, dass eine Anwendung auch unter Windows 7 ein manuelles Herunterfahren des PC in den S5 (Soft-Off) wie gehabt aufhalten kann, indem sie WM_QUERYENDSESSION mit 0 beantwortet. Unter XP passiert dann einfach gar nichts. Unter Windows 7 erscheint dieser Vollbild-Dialog mit einer Nachfrage. Neu ist gegenüber XP auch, dass die Anwendung einen Grund angeben kann, der in dem Vollbild-Dialog angezeigt wird.

Es gibt verschiedene Möglichkeiten @Win7 oder?

 

Man antwortet gar nicht und das System fährt herunter.

Es wird ein timeout definiert und Win7 wartet quasi auf die Anwendung

Die Anwendung bricht den shutdown gleich ab indem sie mit 0 antwortet (dann erscheint auch kein Vollbild Dialog).

 

Das setzt aber voraus, dass die Anwednung ein eigenes GUI-Fenster (unsichtbar ist ausreichend?) hat? Das geht mit dem RS dann schonmal nicht.

 

Wieso sich das mit dem Ruhezustand anders verhält ist mir auch nicht klar.

Ist das wirklich so? Ich hatte vor einiger Zeit nur durchgespielt wie man den shutdown aufhalten kann und das funktioniert wie von Griga angesprochen.

Edited by nuts
Posted
Es gibt verschiedene Möglichkeiten @Win7 oder?

 

Man antwortet gar nicht und das System fährt herunter.

Es wird ein timeout definiert und Win7 wartet quasi auf die Anwendung

Die Anwendung bricht den shutdown gleich ab indem sie mit 0 antwortet (dann erscheint auch kein Vollbild Dialog).

Alle drei Annahmen sind falsch. Lies dir das noch mal sorgfältig durch. Ist auch wirklich etwas kompliziert ;)

 

Wenn der WM_QUERYENDSESSION Messagehandler nicht zurückkehrt (= keine Antwort), weil die Anwendung abgestürzt ist oder im Handler selbst einen modalen Dialog öffnet, der auf eine Antwort des Anwenders wartet, erscheint unter allen Windows-Versionen nach 5 Sekunden das Angebot, die Anwendung zu beenden - unter Windows 7 halt im Vollbild.

 

Ein Timeout kann man nicht definieren.

 

Wenn die Anwendung mit 0 antwortet, erscheint nur unter XP kein System-Dialog, d.h. der Anwender erfährt eventuell gar nicht, was los ist (so grundsätzlich beim DVBViewer Pro, beim DVBViewer GE ist es inzwischen anders). Unter Windows 7 bekommst du auch in diesem Fall die Vollbild-Nachfrage zu sehen.

Posted

Ich würde empfehlen, auf dem Desktop ein Standby-Script (z.B. ein AutoIt-Script) zu verlinken. Das Script kann per HTTP-Request abfragen, ob der Recservice gerade aufnimmt, ein Client verbunden ist oder sonstwas macht. Im Prinzip reicht dafür auch ein kleines CMD-Script unter Verwendung von WGET oder CURL, FIND und SHUTDOWN.

 

Wenn das nicht der Fall ist, führt es den Standby aus, ansonsten eben nicht.

 

Bedingt natürlich, dass der Benutzer konsequent immer das Script für den Standby verwendet und nicht die Funktion im Startmenü von Windows.

 

Ist auch eine gute Idee. Stellt sich mir nur die Frage, wie ich am einfachsten herausfinden kann, ob der Recording-Service gerade etwas aufnimmt...

Bisher gehe ich tatsächlich über ein Script auch in den Ruhezustand (da es seit Windows 8 doch etwas umständlich wurde, den PC in den Ruhezustand zu versetzen)

 

Eventuell kannst du ja auch EG verwenden wenn ja Schau dir mal Suspendghost an

Hört sich interessant an... könnte jedoch etwas oversized sein für mein Thema. Da der Rest eigentlich bisher gut funktioniert.

 

Das setzt aber voraus, dass die Anwednung ein eigenes GUI-Fenster (unsichtbar ist ausreichend?) hat? Das geht mit dem RS dann schonmal nicht.

 

Der Recording-Service kann sehr wohl ein Fenster darstellen... zumindest erhalte ich immer die Info "Recording Service fährt den Computer herunter in 60... 59..." usw. D.h. es wäre auch ok, wenn das Fenster über die Systray-Anwendung realisiert wäre.

 

----

 

Und ansonsten hört sich das nun ja doch so an, als ob es auch unter Windows 7 eine technisch umsetzbare Möglichkeit gibt :)

Posted

Der Recording-Service kann sehr wohl ein Fenster darstellen... zumindest erhalte ich immer die Info "Recording Service fährt den Computer herunter in 60... 59..." usw. D.h. es wäre auch ok, wenn das Fenster über die Systray-Anwendung realisiert wäre.

 

----

 

Und ansonsten hört sich das nun ja doch so an, als ob es auch unter Windows 7 eine technisch umsetzbare Möglichkeit gibt :)

Woraus schließt du das?

 

Mit dem GUI-Fenster meinte ich, dass der RS (ohne GUI) möglicherweise die entsprechende Nachricht gar nicht mitbekommt.

Muss mir das aber wirklich erst nochmal genauer durchlesen.

Posted

Ist auch eine gute Idee. Stellt sich mir nur die Frage, wie ich am einfachsten herausfinden kann, ob der Recording-Service gerade etwas aufnimmt...

Bisher gehe ich tatsächlich über ein Script auch in den Ruhezustand (da es seit Windows 8 doch etwas umständlich wurde, den PC in den Ruhezustand zu versetzen)

 

 

Es gibt das Recordingservice Webapi. Darüber kannst Du z.B. mit der richigen URL den Status als Textdatei bekommen. Zum Absetzen der URL kannst Du wget oder curl benutzen. Dann musst Du nur noch die Textdatei nach den entsprechenden Stichworten durchsuchen, z.B. mit dem Findstr Befehl von Windows.

 

Such mal hier nach recordingservice api.

 

Wenn ich zuhause bin, kann ich das auch mal raussuchen.

Posted

Ich glaub ich hab da was in PowerShell hinbekommen....

 

function Invoke-Hibernate
{
   &"$env:SystemRoot\System32\rundll32.exe" powrprof.dll,SetSuspendState Hibernate
}

$webclient = new-object System.Net.WebClient
$webclient.Credentials = new-object System.Net.NetworkCredential("admin", "xxxxx")
[xml] $webpage = $webclient.DownloadString("http://htpc:8089/api/status.html")

if ($webpage.status.recordcount -ne 0)
{
write "Aufnahme"
}
else
{
write "Keine Aufnahme"
}

 

 

Die Ausgabe funktioniert schonmal :)

Posted

Jep, sieht gut aus. Der Vorteil der Powershell ist, dass Du direkt auf die Elemente der XML-Ausgabe zugreifen kannst.

 

Die SetSuspendState Methode dürfte beim Recordingservice auch funktionieren. Beim DVBViewer hatte ich damit Probleme. Daher schicke ich dem immer ein Exit-Command per COM-Interface. Aber darum geht es hier ja nicht.

×
×
  • Create New...