JumpList - ContextMenu bei Klick auf Icon in der TaskBar

  • C#
  • .NET (FX) 4.0

Es gibt 40 Antworten in diesem Thema. Der letzte Beitrag () ist von us4711.

    JumpList - ContextMenu bei Klick auf Icon in der TaskBar

    Moin Leute,
    wenn mein Programm minimiert ist, möchte ich zusätzliche Menü-einträge im ContextMenu des Programms in der TaskBar, nicht aber in einem NotifyIcon haben, ein solches darf / wird nicht vorkommen.
    Mit C++ unter NT4 hab ich mal so was gemacht, aber das ist halt Geschichte.
    Weiß jemand Rat?
    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!
    Hey @RodFromGermany,
    nur für mein Verständnis; Also du redest jetzt nicht davon, dass du mit der Maus auf dein Programm in der Taskleiste gehst und sobald das "Fenster" aufpoppt du die jeweiligen Funktionen haben möchtest, Beispiel wäre MediaPlayer (Zurück, Pause, Nächstes)...?
    Oder, so kenne ich es bei Chrome, ich gehe auf ein Fenster per MouseOver mache ein rechtsklick (contextmenu) und erhalte die von Chrome hinterlegte funktionen?(Bild)

    Wenn dem so ist!
    Kann ich sogar mal helfen!! 8-)
    Erklärt sich definitiv von selbst :)
    Hab das nämlich auch mal machen wollen.. :) (Woher ich den Code habe weiß ich nicht mehr, sonst würde ich auf den jew. Artikel referenzieren)

    C#

    C#-Quellcode

    1. private const int WMessageRightClickTaskbar = 0x313;
    2. protected override void WndProc(ref Message m)
    3. {
    4. // Check if the intercepted 'message' is a 'right click on taskbar'
    5. if (m.Msg == WMessageRightClickTaskbar) {
    6. // It is possible to change the action that occurs.
    7. // In this case, a context menu is shown at the cursor position
    8. ContextMenuStrip1.Show(Cursor.Position);
    9. // If you change the above event to something other
    10. // than a context menu, remove the 'Exit Sub' below
    11. // to restore the context menu and make it appear also.
    12. return;
    13. }
    14. // If it isnt, then handle it normally
    15. base.WndProc(m);
    16. }



    VB

    VB.NET-Quellcode

    1. Private Const WMessageRightClickTaskbar As Integer = &H313
    2. Protected Overloads Overrides Sub WndProc(ByRef m As Message)
    3. ' Check if the intercepted 'message' is a 'right click on taskbar'
    4. If m.Msg = WMessageRightClickTaskbar Then
    5. ' It is possible to change the action that occurs.
    6. ' In this case, a context menu is shown at the cursor position
    7. ContextMenuStrip1.Show(Cursor.Position)
    8. ' If you change the above event to something other
    9. ' than a context menu, remove the 'Exit Sub' below
    10. ' to restore the context menu and make it appear also.
    11. Exit Sub
    12. End If
    13. ' If it isnt, then handle it normally
    14. MyBase.WndProc(m)
    15. End Sub


    Was man allerdings noch machen müsste ist das ganze etwas erweitern...
    Denn momentan geht das Windoof-Fenster weg und das eigene Kontext-Menü kommt.
    (Wenn Exit Sub weg ist kommt das reguläre Windoof-Kontext-Menü mit dem eigenen...)

    Gruß,
    Drahuverar
    Bilder
    • Bild 2.png

      180,08 kB, 1.100×600, 203 mal angesehen
    Option Strict On!

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Drahuverar“ ()

    Drahuverar schrieb:

    Erklärt sich definitiv von selbst
    Das hatte ich auch schon gefunden, bei mir steht da momentan ne MessageBox drin, allerdings passiert da nix.
    Kann es sein, dass das vom Betriebssystem geblockt wird? Ich hab ein W8.1.
    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 muss gestehen das ich W8(.1) bisher gemieden habe.
    Sofern bei W8 dieses Vorschau-Fenster existiert sollte es funktionieren.. Behaupte ich mal.
    Ich habe Daheim W10 installiert, da könnte ich es noch testen.
    So ad hoc kann ich dir nicht sagen ob es geblockt wird :/

    Hast du Chrome bei dir Installiert? Kommt es da?
    (Habe leider gerade keine anderen Programme zur Hand bei denen ein Erweirtertes Kontext-Menü ist)
    Option Strict On!

    Drahuverar schrieb:

    Chrome
    Nö, ich hab den Feuerfuchs, da sieht das aber genau so aus:
    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!
    Also das habe ich noch nicht gehabt;
    Bei Google mal nachgefragt "win8 WMessageRightClickTaskbar" ...nur 2 Ergebnisse erzielt 8|
    Ich müsste es mal testen, hab noch ein 8.1er Image Daheim rumliegen. Dann klatsche ich das mal auf die virtuelle Maschine und schaue wie es sich da verhält.. Vielleicht kann man irgendwas in der Registry durch rumspielen etwas freischalten.
    ---
    Edit:
    Windows "Remotedesktopverbindung" hat noch ein erweitertes kontext-menü, wird dir das angezeigt?
    (Bei Offener RDP Sitzung -> "Hilfe", "Vollbild,"Remotebefehle"
    Bei einfachem Aufruf der Login-Form -> "Info")
    Option Strict On!

    Drahuverar schrieb:

    erweitertes kontext-menü
    Wenn ich das richtig praktiziert habe: Nein.
    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!

    RodFromGermany schrieb:

    da sieht das aber genau so aus:


    Ich hab dir mal ein kleines Video gemacht, ist leider eine SWF, da das Programm als SWF ausspeichert (jing aufnahme). Einfach in den Feuerfuchs reindrag'n'dropn lassen^^

    Gibt 3 verschiedene Anwendungsfälle;
    1. rechtsklick auf das icon (Dein Bild von post #5)
    2. Einmal rechtsklick auf die Vorschau (Mein Bild #2)
    3. Die Vorschau beinhaltet eingebettete Buttons (MediaPlayer z.B., oder VLC)

    In dem Video siehst du 1-2

    Was genau möchtest du nun machen? ;)
    Dateien
    Option Strict On!

    Drahuverar schrieb:

    Was genau möchtest du nun machen?
    Dies:
    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!
    Also du gehst mit der Maus auf das Icon, wartest bis die Vorschau kommt und machst dann ein Rechtsklick~ Dann sollte das auf jeden Fall gehen.
    Ich hab mal gerade noch eine kleine Solution beigefügt. (VB aber... macht aber nix, oder?)
    Dateien
    Option Strict On!

    Drahuverar schrieb:

    auf jeden Fall gehen
    Nö, da geht nix.
    Muss wohl doch am System liegen. ;(
    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!
    Bei

    Drahuverar schrieb:

    Mousehover
    kommt nur das Thumbnail-Image der Form.
    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!
    Und da müsstest du rechts-klicken.

    [OT]Ich sage immer Vorschau, denn ein Thumbnail wird nur dann angezeigt/erstellt, wenn das Programm minimiert worden ist/minimiert wird. Wenn die Anwendung den Fokus verliert, dann läuft sie immer noch weiter -kann man schön bei Media-Playern oder offenen YouTube Fenstern im Browser sehen.[/OT]
    Ich weiß nicht wie Thumbnail definiert ist, aber für mich ich das was statisches ^^

    Aber kann es sein das dies alles unter dem AERO Feature basiert?
    WIN8.1 hat doch kein AERO, oder wie war das nochmal?
    Option Strict On!
    @RodFromGermany
    Ich glaube, Du suchst die "Jumplist"
    Anfang des Jahres ist mir sowas mal untergekommen, ich füge ein Beispielprojekt bei.
    Da muss Einiges an Verweisen nachinstalliert werden, u.a. Microsoft.Windows.APICodePack über NUGet.
    Dateien

    Drahuverar schrieb:

    minimiert worden ist/minimiert wird
    Nö, das ist wohl ab W8 doch alles neu :/

    ==========================
    @us4711 "Jumplist" sieht schon sehr freundlich aus.
    Das WindowsAPICodePack hat er gaaaaaanz alleine nachgeladen (oder ich hatte da schon mal ne Test-Installation).
    Allerdings ist es möglich, dass ich das auf nem Kunden-Geräte-Rechner nicht installieren darf.
    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!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    RodFromGermany schrieb:

    Nö, das ist wohl ab W8 doch alles neu

    Echt blöd :|
    Aber der Mediaplayer von Windows zum Beispiel hat doch sicher die Knöpfe drin... Bei Win8(.1)..?
    Ich muss das heute definitiv testen <X

    @us4711
    Cool, Jumplist. Ich hatte bis eben kein Wort dafür :whistling:
    Wieder was gelernt :D
    Schönes Sample, danke Dir. :thumbup:

    ---
    [OT] die Jumplist bekommt ihr übrigens (ohne Maus) über Windows+Alt (halten) + Ziffern 1-0 für die jeweilig platzierten Icons auf der Taskbar. [/OT] :thumbup:
    Option Strict On!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drahuverar“ ()

    Doch noch nicht fertig.
    Es sieht so aus, als ob diese Jumplist unter W8.1 so nicht funktioniert oder ich hab da noch nen kapitalen Fehler drin.
    Die Liste wird angezeigt, aber es passiert nix.
    Ich häng mal mein Projekt dran. Kann das bitte mal jemand unter W7 testen?

    Dateien
    • JumpList.zip

      (284,19 kB, 108 mal heruntergeladen, zuletzt: )
    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!
    ...witzig, ich war gerade eben noch auf dem Post ^^
    Ich schaue es mir an und editiere mein Post dann.

    --- @RodFromGermany
    Sorry, kam nicht eher dazu. Bei mir wird auch nichts ausgelöst, wenn ich die JumplistItems drücke.
    Wenn ich den Haltepunkt an die jeweiligen Aufrufe platziere

    Quellcode

    1. NativeMethods.SendMessage("Jumplist.demo", NativeMethods.Maximize);
    springt er auch gar nicht erst rein.
    Die MessageBoxen bringt er raus..
    Leider kenne ich mich in C# nicht all zu gut aus und verstehe da kaum etwas. (Wenn ich es auch nachvollziehen kann/konnte)

    Habe es in VB.NET mal durchgespielt, die Problematik ist mir jedenfalls klar.
    Habe mich anfangs gewundert wieso du so "umständlich" versuchst die Fenster zu maximieren/minimieren/normal darzustellen.
    Nachdem ich versucht habe eine eigene Sub auszulösen war es mir dann doch klar... Gar nich' mal so einfach.

    Ich knoddel mich, wenn ich noch dazu komme, auch mal weiter rein, interessiert mich.

    Habe hierzu noch was gefunden, werde das später mal durchgehen C# und VB -- vielleicht hilft das ja schonmal.

    Hab mal grad die Solution dran gehangen, hab da mehr mit den Thumbnail-Buttons rumgespielt :rolleyes:

    Gruß,
    Drahuverar
    Dateien
    Option Strict On!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drahuverar“ ()

    Drahuverar schrieb:

    dran gehangen
    Sorry, hier hab ich Win10, da geht bis auf die TrackBar gar nix.
    Bei Microsoft hab ich dies gefunden, ebenfalls nix.
    ;(
    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!