2016-05-04 6 views
-1

Ich habe ein Windows-Desktop-Programm (Tweetz), das den Ruhezustand beim Ausführen unterbricht/verhindert. Die Art des Programms besteht darin, Twitter zu überwachen und die Benutzeroberfläche zu aktualisieren, sobald Tweets ankommen. Ich vermute, dass die Netzwerkaktivität und/oder das Aktualisieren der Benutzeroberfläche den Schlafmodus verhindert/unterbricht.Verhindern, dass die Windows-Desktop-Anwendung den Ruhezustand unterbricht

Gibt es eine System-API, die Windows mitteilen kann, dass eine Anwendung das Einschlafen nicht verhindern soll?

+0

Sie sehen das in die falsche Richtung. Etwas stimmt nicht mit deinem Programm. Arbeite heraus, was es ist, und repariere es. Der Funktionsaufruf, nach dem Sie suchen, existiert nicht. Weil es nicht notwendig ist. –

+1

* "Gibt es eine System-API, die Windows mitteilen kann, dass eine Anwendung das Einschlafen nicht verhindern soll?" * - Nein, aber das Gegenteil ist möglich: [SetThreadExecutionState] (https://msdn.microsoft.com/en-us/library /windows/desktop/aa373208.aspx). Vielleicht nutzt die Anwendung dies als * "Feature" *. UI-Updates verhindern zwar nicht, dass das System in den Energiesparmodus wechselt, der Netzwerkverkehr könnte jedoch beeinträchtigt werden (siehe [Systemeinschlafkriterien] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa373233.aspx)). – IInspectable

+0

Es ist also wahrscheinlich, dass der Netzwerkverkehr, der Twitter überwacht, den Schlaf auslöst. Scheint wie ein Haken 22. Gibt es einen Workaround? –

Antwort

1

Ich würde den folgenden Ansatz vorschlagen. Codieren Sie den Twitter-Monitor in einem Windows-Dienst und puffern Sie alle Meldungen, die Sie anzeigen müssen. Überprüfen Sie für diese Nachrichten, ob sich das System im Energiesparmodus befindet oder ob der Desktop gesperrt ist (gemäß Ihren Anwendungsspezifikationen). Richten Sie einen Kommunikationsmechanismus mit Ihrer Desktop-Anwendung ein und übertragen Sie Nachrichten bei Bedarf. Der Dienst verhindert nicht, dass Ihr System in den Ruhezustand versetzt wird. Sie können Sitzungsstatusänderungen mit SetServiceStatus() mithilfe von SERVICE_ACCEPT_SESSIONCHANGE überwachen. Sie können auch das Ereignis OnSessionChange verwenden.

1

Vielleicht schläft Windows erfolgreich, aber Ihre App weckt es sofort, indem es Netzwerkverkehr sendet. Wenn ja, könnten Sie mit WM_POWERBROADCAST Nachrichten umgehen, insbesondere PBT_APMQUERYSUSPEND und PBT_APMRESUMEAUTOMATIC. Stoppen Sie den Netzwerkverkehr beim Suspend und starten Sie ihn bei Resume neu.

+0

Legen Sie den Schlaf für eine Minute, warten Sie auf Schlaf, Tweet kommt, System wacht auf. Ich habe auch gefunden, dass, wenn ich das Netzwerk abkopple, das System schläft. Kein definitiver Test, aber es zeigt mit Sicherheit einen Fingerzeig auf die Netzwerkaktivität. Ich werde tun, was du vorschlägst. Zumindest wird es dann nicht aufwachen. –

Verwandte Themen