Monitor in Standby/ausschalten



  • Hä?? Wieso geht das denn so, aber als eine Funktion nicht? Sachen gibts... kann man ein Profi erklären!? :p



  • Probiers einfach und sag mir obs geht.



  • Moment, ich bin noch nich ganz wach 😃



  • Jo, Deine Version funktioniert genauso, wie meine alte. Sprich: Im Compiler ausführen funzt perfekt, beim selbst ausführen nich so...



  • Wär auch ziemlich seltsam gewesen. 😃 Mit einem Trick gehts (bei mir) wunderbar. Ich ruf das Programm mit einem anderen auf. Z.B. unter Windows mit einer Batchfile. Also eine Textdatei erstellen und deinen Programmpfad reinschreiben. Sah bei mir so aus: C:\Meine_Progs\test.exe. Dann speichern unter *Dateiname*.bat . So muss es gehen. Is halt auch ne Beta.
    Wozu brauchst du das überhaupt?



  • Das soll dazu sein, um den Monitor aus der Ferne auszuschalten. Wenn ich abends im Bett liege und einen Film am PC angesehen habe, dann hab ich keine Lust mehr aufzustehen und den Monitor auszumachen 😃 . So ruf ich einfach das Programm mit der Fernbedienung auf und fertig.

    Hab übrigens grad ne interessante Funktion gefunden.

    Sleep(5000);
    

    Damit kann man Wartezeit in Millisekunden programmieren. Werd das nachher mal ausprobieren, sitz schon am nächsten Projekt 💡



  • So funktioniert's jetzt wunderbar:

    // standbyme.cpp
    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    int main() {
        int waittime=5000;  // Wartezeit in Millisekunden
        cout<<"Der Monitor wird in "<<waittime/1000<<" Sekunden in Standby geschaltet!"<<endl;
        Sleep(waittime);
        SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 2); // Monitor aus
    }
    

    Man kann die Wartezeit natürlich noch reduzieren. Als nächstes werd ich mal versuchen, das Ganze in eine Windows-Anwendung, sprich WinAPI, zu portieren...



  • Glückwunsch! Gaaaaaaanz viel Spaß beim WinApi-Portieren!!! 😉

    PS: Warum willst du nur den Monitor auschalten? Schläfst du beim monotonen Computerbrummen besser?
    Was bringt dir die WinApi; du schaltest den Monitor doch eh ab!?
    Was ist denn dein nächstes Projekt, wenn ich fragen darf?
    So, jetzt bin ich fertig. 😃



  • Nee nee, ich hab nen recht leisen PC. Is halt ne 24/7-Rechenmaschine 😃 Mit WinAPI sieht's halt besser aus...

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-143622.html

    Das ist mein nächstes Projekt. Aufgrund meiner Gehäusekonstruktion komm ich nich an den Eject-Knopf. Dafür will ich jetzt ein Programm schreiben.



  • #include <windows.h>
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR scCmdLine, int iCmdShow)
    {
        int WaitTime = 5000;
    
        MessageBox (NULL, TEXT(" Der Monitor wird in 5 Sekunden abgeschaltet !"),
                          TEXT(" StandBy "), 0);
        Sleep(WaitTime);
        SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);
    }
    

    Dasselbe als Winapi-Programm für Minimalisten. 🙂

    Überigens, lag dein ursprünglicher Fehler, daran dass Du eine "Main"-Funktion für Dos benutzt hast. Mit der "WinMain"-Funktion klappt es auch so :

    #include <windows.h>
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR scCmdLine, int iCmdShow)
    {
    
        SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);
    }
    

    Ich schätze mal, dass es an der Übergabe des Programms beim Beenden an das Betriebssystem lag. Wird die Dos-Funktion beendet, reagiert dass Betriebssystem anders als bei einer Windows-Funktion.


Anmelden zum Antworten