Desktop anzeigen



  • Mein Ansatz wäre mir das Handle auf den Desktop zu holen und
    dann ShowWindow anzuwenden.

    Nur funktioniert das so leider bei mir nicht.

    CWnd* hwndDesktop=GetDesktopWindow(); 
    hwndDesktop->ShowWindow(SW_SHOWNORMAL);
    


  • Was ist denn CWnd? Muss das nicht HWND sein?

    Und ist der Desktop wie ein normales Fenster zu behandeln? Dann wäre

    BOOL ShowWindow(HWND hWnd,int nCmdShow);
    

    viell der richtige Ansatz (siehe Hilfe zu "ShowWindow"). Aber da man den Desktop nicht minimieren kann etc. bezweifle ich, dass man den wie ein normales Fenster behandeln kann. Kann mich natürlich irren.



  • Kolumbus schrieb:

    Was ist denn CWnd? Muss das nicht HWND sein?

    Sowas kommt heraus, wenn MFC'ler auf pur-WinAPI'ler prallen 😃
    (zur Erklärung: Die MFC ist eine Klassenbibliothek, die die ganzen WinAPI-Calls hinter Klassenmethoden versteckt. Und die Klasse CWnd kapselt im Inneren einen HWND und reicht diesen dann bei Bedarf an die WinAPI weiter).



  • Aha, verstehe. Also Beides nicht falsch... Außer wenn man genau betrachtet in welchem Unterforum wir hier sind. 😉

    Und, wie sieht es mit dem Rest der hier geposteten Ansätze / Überlegungen aus? Kannst Du Dich dazu bitte auch äußern @CStoll, bist ja um einiges versierter... 👍



  • Kolumbus schrieb:

    Aha, verstehe. Also Beides nicht falsch... Außer wenn man genau betrachtet in welchem Unterforum wir hier sind. 😉

    Alles eine Frage der Gewohnheit 😃

    Und, wie sieht es mit dem Rest der hier geposteten Ansätze / Überlegungen aus? Kannst Du Dich dazu bitte auch äußern @CStoll, bist ja um einiges versierter... 👍

    Praktisch ausprobiert habe ich es auch noch nicht (war bislang auch nicht nötig, den Desktop explizit anzeigen zu lassen), also bleiben nur zwei Möglichkeiten: (a)ausprobieren und sehen, was Windows dazu sagt oder (b) warten auf die echten Experten (vielleicht meldet sich ja einer hier).



  • Für (a) ist DerHeide zuständig.

    (b) praktiziere ich in diesem Fall. Please hold the line!

    @DerHeide: Ich hab Deine Posts nochmal gelesen... Willst Du einfach Deine Anwendung ausblenden, oder Alle geöffneten?



  • Es funktioniert wie oben beschrieben nicht und auch nicht mit PostMessage(..)
    bzw. SendMessage.



  • Ihr könnt das ja gar nicht. 😃 🤡

    SendMessage( FindWindow("Shell_TrayWnd", NULL), WM_COMMAND, 407, 0 );
    

    🕶
    🙂



  • Wie Kolumbus schon sagte: Wen willst du überhaupt minimieren?

    • das eigene Fenster?
    this->ShowWindow(SW_MINIMIZE);//für Kolumbus: das ist identisch zu ShowWindow(myHwnd,SW_MINIMIZE)
    
    • alle vorhandenen Fenster?
      Da bleibt im Notfall die Extremvariante - minimiere jedes Fenster einzeln:
    //Prinziplösung - solltest du eventuell mit der MSDN abgleichen
    EnumWindows(ShowWindow,SW_MINIMIZE);
    


  • CStoll schrieb:

    //für Kolumbus: das ist identisch zu ShowWindow(myHwnd,SW_MINIMIZE)
    

    Ich kann da nicht drüber lachen 😃

    proggingmania schrieb:

    SendMessage( FindWindow("Shell_TrayWnd", NULL), WM_COMMAND, 407, 0 );
    

    und was ist das für eine flache Aktion? 😉

    DerHeide schrieb:

    Es funktioniert wie oben beschrieben nicht...

    Was soll Es denn nun werden?



  • Kolumbus schrieb:

    CStoll schrieb:

    //für Kolumbus: das ist identisch zu ShowWindow(myHwnd,SW_MINIMIZE)
    

    Ich kann da nicht drüber lachen 😃

    Das war auch nicht als Witz gedacht - ich wollte nur weitere Bemerkungen zu den MFC-Methoden vermeiden 😉

    PS: Eine Alternative zu dem obigen EnumWindows() ist mir im Nachhinein noch eingefallen:

    SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MINIMIZE,0);
    


  • Kolumbus schrieb:

    und was ist das für eine flache Aktion? 😉

    Diese ultracoole Aktion macht das, was der OP gern hätte, 🕶
    nämlich die Tastenkombination 'Windowstaste+D' softwaregesteuert zu emulieren. 😃

    edit: könnt ihr denn alle nicht lesen ? 😃



  • CStoll schrieb:

    PS: Eine Alternative zu dem obigen EnumWindows() ist mir im Nachhinein noch eingefallen:

    SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MINIMIZE,0);
    

    Mir auch, wie wäre es mit dem HWND_BOOST_SEND_VIA_SATTELITE_ACTIVATION_TEMPLATE Flag ? 😃



  • CStoll schrieb:

    ...ich wollte nur weitere Bemerkungen zu den MFC-Methoden vermeiden...

    jaa - ich spare sie mir ja schon... 🤡

    proggingmania schrieb:

    Diese ultracoole Aktion macht das, was der OP gern hätte, 🕶
    nämlich die Tastenkombination 'Windowstaste+D' softwaregesteuert zu emulieren. 😃

    hmmm... sah auf den 1. Blick irgendwie aus, wie ein "flachmachen" des Fensters. Deswg. "flache Aktion". Aber ich mache mich sofort schlau. 😞

    proggingmania schrieb:

    ... wie wäre es mit dem HWND_BOOST_SEND_VIA_SATTELITE_ACTIVATION_TEMPLATE Flag ?

    Mach sowas bitte nicht nochmal, wenn ich hier im Büro schon ab und an ins Forum schaue sollte ich nicht laut loslachen und den ganzen Schreibtisch vollspucken... 😡



  • CStoll schrieb:

    PS: Eine Alternative zu dem obigen EnumWindows() ist mir im Nachhinein noch eingefallen:

    SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MINIMIZE,0);
    

    Hast Du's probiert!? 😃

    Ich wär für:

    #include <windows.h>
    
    void show_desktop( ) {
    
        keybd_event( VK_LWIN, 0, 0, 0 );
        keybd_event( 0x4d, 0, 0, 0 );
        keybd_event( 0x4d, 0, KEYEVENTF_KEYUP, 0 );
        keybd_event( VK_LWIN, 0, KEYEVENTF_KEYUP, 0 );
    }
    

    greetz, Swordfish



  • LOL danke, aber die Version von proggingmania hätte mir auch einfallen
    müssen. Funktioniert natürlich super. 👍

    keybd_event wäre sicher auch gegangen, aber SendMessage bzw. sogar eher
    PostMessage sind da vermutlich wesentlich sicherer.



  • Swordfish schrieb:

    CStoll schrieb:

    PS: Eine Alternative zu dem obigen EnumWindows() ist mir im Nachhinein noch eingefallen:

    SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MINIMIZE,0);
    

    Hast Du's probiert!? 😃

    Ehrliche Antwort? Nein.


Anmelden zum Antworten