Monitor in Standby/ausschalten



  • Moin!

    Is mein erster post, also bitte nicht gleich steinigen wenn ich irgendwas falsch mache...

    Ich bin ziemlicher Anfänger, was die Programmierung unter c++ angeht, allerdings hab ich schon ein wenig(!) Erfahrung mit OOP unter Java. Is ja auch egal. Jedenfalls wollte ich mich nun an c++ machen. Ich nutze den Dev-C++ Compiler, meine Frage is folgende:

    Ich möchte mir gerne ein für mich nützliches Programm schreiben, was den Monitor entweder ausschaltet oder in den Standby schickt. Die nötige Funktion hab ich wohl schon gefunden, allerdings funktioniert's nich (war ja klar) 😃

    Ich schätze, mir fehlt die nötige library zu der Funktion. Vielleicht kann sich das ein "Könner" ja mal anschauen 😉

    Also mein Source-Code bis jetzt:

    // standbyme.cpp
    #include <iostream>
    using namespace std;
    
    int main() {
    SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 1); // Monitor auf Stand-By
    }
    

    Vielen Dank schonmal im Vor.raus!

    mfg

    Lars



  • Probier mal

    #include <windows.h>
    

    .



  • jau dange, das funktioniert schonmal. Das Problem is nur, der Monitor schaltet sich sofort wieder ein... Ist das vielleicht die falsche Funktion?

    Und noch ne andere Frage: Kann man beim Dev-C++ das Symbol für die kompilierte .exe-Datei ändern?



  • 1. Keine Ahnung. Schau da nach, wo du die Funktion herhast. Ist sicher beschrieben.

    2. Ja, aber das gehört hier überhaupt nicht hin. (Trotzdem ein Tipp: in den Projektoptionen vermutlich).



  • Ich danke Dir, Unbekannter.

    Zu Punkt 1: Da steht leider kein weiterer Hinweis zu. Mir ist da aber etwas aufgefallen: Wenn ich das Programm unter Dev-C++ ausführe, dann funktioniert's und der Monitor bleibt im Standby. Wenn ich allerdings die .exe aufrufe, springt er kurz in den Standby und sofort wieder zurück. Ich vermute, das liegt am Tastenanschlag (Enter) oder aber am Doppelklick. Vielleicht kann ich die Funktion ja irgendwie verzögern. Gibt es da vielleicht irgendeine Funktion oder muss ich das mit ner Variablen machen, die sich bis zu nem bestimmten Wert hochzählt?

    Zu Punkt 2: Danke für den Tip 😉

    mfg

    Lars



  • Hm, ich weiß nicht, ob eine Verzögerung was bringt. Gegen den Tastenanschlag sollte aber

    fflush(stdin); //Löscht den Tastaturpuffer
    

    vor dem SendMessage-Befehl helfen. Setz das mal ein und ruf dann die EXE mit Enter auf. Liegt´s am Anschlag, sollts jetzt klappen.



  • Nee, hat leider nichts gebracht. Verdammt.



  • Achja, ich empfehle dir einen Duden. (Voraus! 😃 Genau wie ich das gemacht habe loL)



  • Verzögerung hat leider auch nichts gebracht. Hab's probiert mit dieser Schleife, die ich vor die SendMessage-Funktion gesetzt hab:

    int i;
        for (i=0; i<500; i++) {
            cout << i << " ";
            }
    

    Habe auch höhere Maxima ausprobiert, aber funzt nicht. ich weiß ja auch nicht, wie lange das Programm braucht, um die Schleife durchlaufen zu lassen...

    Noch ne Idee?



  • xMox schrieb:

    Achja, ich empfehle dir einen Duden. (Voraus! 😃 Genau wie ich das gemacht habe loL)

    😃 Ich war mir bei dem Wort irgendwie nicht sicher, hab mich aber gewundert, dass es "ausgesternt" wurde. Na ja, man lernt nie aus, Hauptsache man versteht mich 💡



  • Wie gesagt, ich bin Kein Könner. 😃 Ich kann dir auch wohl kaum mehr behilflich sein; höchstens raten. Dein Quellcode sieht jetzt so aus oder?

    // standbyme.cpp
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main() 
    {
     fflush(stdin);
     SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 1); // Monitor auf Stand-By
    }
    

    Die Verzögerung lassen wir raus.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Jau, genauso sieht's aus. Ich frag mich halt nur, warum es klappt, wenn Dev das Programm ausführt und nicht, wenn ich es ausführ. Toll, mein erstes Programm geboren und es mag mich nicht. Ein schöner Anfang 😞



  • 🙂
    Wir wurden verschoben. Ich hab nur drauf gewartet.
    Verhinder mal, dass sich das Fenster wieder schließt. Inkludier mal <stdio.h> und schreib nach dem Monitor-Standby-Befehl: getchar(); .



  • Hab ich getan. Is aber genauso wie vorher, nur dass jetzt halt das Programmfenster geöffnet bleibt. Wofür is'n die getchar()?



  • Weiß denn keiner Rat?



  • getchar() ist in unserem Fall nur dafür da, auf ENTER zu warten. Also wird das Programm gehalten, bis Enter gedrückt wird. Anders hab ich es noch nie hergenommen. In C++ nimmt man für beinahe alles cin.
    Aber was dein Programm hat, weiß ich jetzt selber nicht so recht. Bisher konnt ich das Teil noch nicht selber ausprobieren, weil der PC hier keinen Compiler installiert hat. Ich muss auf meinen Schlepptop ausweichen, dann kann ich dir hoffentlich bald (oder später) mehr sagen.

    Bis dann, irgendwann!



  • // standbyme.cpp
    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    int main() {
        fflush(stdin); //Löscht den Tastaturpuffer 
        int i;
        for (i=0; i<5000; i++) {
            cout << i << " ";
            }
        SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 2); // Monitor aus
    }
    

    So funktioniert's jetzt. Ist zwar eher unelegant, aber na ja. Is halt ne Beta 😃



  • So gehts bei mir.

    // standbyme.cpp 
    #include <iostream> 
    #include <windows.h> 
    
    using namespace std; 
    
    void monitorStandby(void);
    
    int main() 
    {  
      monitorStandby();
    } 
    
    void monitorStandby(void)
    {
     SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 1); //Monitor auf Stand-By
    }
    

    Keine Ahnung wieso, aber es geht.



  • Tja, da bin ich jetzt mit meinem Latein schon am Ende. Das ist doch ne Funktion-in-Funktion, oder nich? Letztendlich nix anderes als mein Programm ohne Schleife, oder?


Anmelden zum Antworten