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.aspxEs 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