Großer "Show Desktop Button"

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Großer "Show Desktop Button"

    Hi,

    früher gar es mal in der Taskbar rechts außen einen Show Desktop Button. Wenn man da drauf geklickt hat, wurden alle offenen Fenster minimiert. Wenn man noch mal drauf gezeigt hat, wurden die Fenster wieder angezeigt.

    Das war sehr praktisch. Leider wurde dieser Button in Windows 10 zu einem Strich verkümmert. Und den zu treffen ist so hakelig, dass ich den nicht mehr nutzen will.

    Es gibt m.W. keine vernünftige Möglichkeit diesen Strich zu einem ordentlichen Button aufzublasen.

    Deshalb möchte ich diese Funktion selbst realisieren.

    Ich habe eine Form, die hat nur eine Picture Box, mit Dock Fill in einer Form mit FormBorderStyle=None. Also nichts weiter als ein kleines Rechteck. Dieses Control platziere ich in die rechte untere Ecke des Bildschirms und rufe aus der Shell32.dll die Funktion shell.ToggleDesktop() auf.

    Mit der linken Maustaste wird getoggelt.
    Mit der rechten Maustaste wird das Program beendet.

    Hier ist mein bescheidenes Coding:

    VB.NET-Quellcode

    1. 'Add reference: COM - Microsoft Shell Controls and Automation (Shell32.dll)
    2. Public Class FrmShowHideDesktop
    3. Private Sub FrmShowHideDesktop_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. 'Get primary screen height and width
    5. Dim myWorkArea As Rectangle = Screen.PrimaryScreen.WorkingArea
    6. 'Set size of control
    7. Me.Size = New Size(20, 40)
    8. 'Position control into lower right corner
    9. Me.Location = New Point(myWorkArea.Width - PicControl.Width,
    10. myWorkArea.Height - PicControl.Height)
    11. End Sub
    12. Private Sub PicControl_MouseClick(sender As Object, e As MouseEventArgs) Handles PicControl.MouseClick
    13. 'Terminate program with right mouse button click
    14. If e.Button = MouseButtons.Right Then
    15. Me.Close()
    16. Exit Sub
    17. End If
    18. 'Show / hide with left mouse button click
    19. Dim shell As Shell32.Shell = New Shell32.Shell()
    20. shell.ToggleDesktop()
    21. shell = Nothing
    22. End Sub
    23. End Class



    Beim ersten Klick werden wie gewünscht alle Fenster minimiert.

    Aber leider bleibt es dabei. D.h. weitere Mausklicks zeigen die minimierten Fenster nicht wieder an!

    Eigentlich meine ich mich genau an Microsoft Docs gehalten zu haben. Aber offensichtlich mache ich etwas falsch.

    Vielleicht kennt sich ja jemand mit dem Dingens aus und kann mir nachsichtig auf die Sprünge helfen.

    LG
    Peter
    @Peter329 Es sieht fast so aus, als wäre das verloren gegangen.
    Im TaskBar-Context-Menu gibt es zu "Desktop anzeigen" das Pendant "Geöffnete Fenster anzeigen", allerdings ist die Suche nach diesem Stichwort suboptimal.
    Um das "richtige" Toggeln selbst zu machen, kannst Du das ganze ja selbst schreiben und wendest auf die geöffneten bzw. vorhandenen Fenster API.ShowWindow(MINIMIZE) bzw. API.ShowWindow(RESTORE) an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich habe mir das gleich als erstes ein "Desktop anzeigen"-Ikon erstellt nachdem ich auf WIN10 umgestiegen bin. Die war ja in Vista wie auch in Win7 vorhanden.

    Ist sehr einfach zu erstellen, und macht genau das was du willst. Die Datei Desktop anzeigen.scf habe ich aber direkt ins C:\Windows gelegt.

    Hier eine Anleitung.
    tecchannel.de/a/sichtbares-ico…uesten,3277656#:~:text=Um


    Freundliche Grüsse

    exc-jdbi

    Peter329 schrieb:

    Es gibt m.W. keine vernünftige Möglichkeit diesen Strich zu einem ordentlichen Button aufzublasen.
    Das hatten wir schon mal: Desktop anzeigen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wie immer erst mal herzlichen Dank für eure Ratschläge.

    Das mit dem Vergrößern des ShowDesktopButtons ist halt nicht ganz so trivial. Da scheue ich offen gestanden den Aufwand ... zumal es ja auch "Nebenwirkungen" gibt. :)

    Die Sache mit dem Icon, die exc-jdbi eingestellt hat, die geht natürlich genauso im VB. So habe ich das ja in meinem obigen Coding auch gemacht. Ich habe jetzt sogar herausgefunden, warum meine Lösung beim ZWEITEN Aufruf (hide) nicht mehr funktioniert. Für alle die es interessiert:

    Ich habe die Form mit TopMost=True definiert. Damit sie nicht verschwindet und mein Control weiterhin sichtbar bleibt. Und genau das wird der Sache wohl zum Verhängnis ! shell.ToggleDesktop() nimmt nun beim zweiten Aufruf an, dass Fenster offen sind und macht nochmal einen "hide", statt nun den "show" durchzuführen.

    Dass dem so ist, kann man beweisen: denn die Windows-Taste+D macht den "show". :)

    Ich habe den Quatsch mit TopMost=True und Control in der rechten unteren Ecke jetzt einfach weggelassen und starte die Anwendung einfach von einem Icon aus. So sieht mein Code jetzt aus:

    VB.NET-Quellcode

    1. 'Add reference: COM - Microsoft Shell Controls and Automation (Shell32.dll)
    2. Public Class FrmShowHideDesktop
    3. Private Sub FrmShowHideDesktop_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. 'Show / hide desktop
    5. Dim shell As Shell32.Shell = New Shell32.Shell()
    6. shell.ToggleDesktop()
    7. shell = Nothing
    8. Me.Close()
    9. End Sub
    10. End Class


    Und das funktioniert prima

    Der einzige Wermutstropfen: das Dingens ist halt ein Icon in der Taskleiste ... und nicht der schnuckelige Button rechts unten in der Task Leiste. Wenn man das noch hinbekommen könnte, dass das Icon rechts außen steht, wäre ich völlig happy. Aber das geht wohl nicht ohne Kopfstände ...

    Gegenüber der WindowsTaste+D gewinnt man nicht viel ... man kann die Funktion jetzt halt mit der Maus durchführen. Aber es sind ja auch nur 8 Zeilen Code ... :)

    Schöne Ostern!

    LG
    Peter
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!