Globale Tastenkombination im Tray Modus



  • Hallo,

    ich hab ein Programm, was auf verschiedene globale Tastenkombinationen reagiert.

    Grundlage bietet die Klasse von Tim Hartwig:
    http://dotnet-snippets.de/dns/c-globale-hotkeys-tastenkombinationen-SID356.aspx

    Es funktioniert auch alles super. Jetzt hab ich ein TrayIcon hinzugefügt und beim Minimieren, wird die Anwendung ins Tray gelegt.

    private void Form1_Resize(object sender, System.EventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    this.trayIcon.ContextMenu = contextMenu;
                    this.ShowInTaskbar = false;
                    this.WindowState = FormWindowState.Minimized;
                    this.trayIcon.Visible = true;
                }
            }
    
            private void trayIcon_DblClick(object sender, System.EventArgs e)
            {
                this.ShowInTaskbar = true;
                this.trayIcon.Visible = false;
                this.WindowState = FormWindowState.Normal;
            }
    

    Der Traymodus funktioniert ebenfalls. Nur wenn ich das Programm ins Tray lege reagiert es nicht mehr auf die gloablen Shortcuts. Wenn ich es dann wiederherstelle, als das Fenster aufmache, reagiert es nach wie vor nicht mehr auf die Shortcuts.

    Muss ich bei der Ablage in Tray irgendwas beachten, dass die registrierten Tastenkombinationen erhalten bleiben?

    Besten Dank für Denkanstöße. 😉

    mfg



  • Ok,

    hab eine Lösung.

    Falls jemand auch mal das Problem hat, man kann es mit einem Trick umgehen.

    statt

    this.ShowInTaskbar = false;
    

    nimmt man

    TaskBarVisible((int)this.Handle, false);
    

    mit den Funktionen

    [DllImport("User32.dll")]
    private static extern void SetWindowPos (int hWnd,
                                             int hWndInsertAfter,
                                             int x,
                                             int y,
                                             int cx,
                                             int cy,
                                             int wFlags);
    
    private void TaskBarVisible(int FormHandle, bool Visible)
    {
         if (Visible == true)
             SetWindowPos (FormHandle, 0, 0, 0, 0, 0, 64);
         else
             SetWindowPos (FormHandle, 0, 0, 0, 0, 0, 128);
    }
    

    Wichtig ist noch drauf zu achten, dass man

    this.WindowState = FormWindowState.Minimized;
    

    beim Minimieren nicht verwendet.

    MFG


Anmelden zum Antworten