Maximiertes Fenster festpinnen



  • Moin,

    ich habe folgende Situation:
    Ich möchte gerne, dass wenn mein Fenster maximiert ist sich das Fenster nicht verändern lässt, solange eine Menüoption vom Benutzer aktiviert ist. Ich habe bereits über WM_SYSCOMMAND die entsprechenden Optionen abgefangen und deaktiviert.

    Funktioniert augenscheinlich auch ganz gut, solange der Benutzer die Tastatur nicht verwendet.

    Das Problem:
    Über Windows + Unten wird die ursprüngliche Größe/Position wiederhergestellt und zwar trotz dessen, dass ich SC_RESTORE unterdrücke und im Menü die Option auch ausgegraut ist. Diese Message wird bei dieser Tastenkombi anscheinend gar nicht erst erzeugt, denn sie kommt nicht an.

    Über Windows + Links, Windows + Rechts wird das Fenster in die linke/rechte Monitorhälfte eingepasst (Snap). Die Positionsänderung kann ich zwar über WM_WindowPosChanging verhindern, aber es verliert dennoch den Maximiert-Status und damit auch die ursprünglichen Restore-Werte.

    Kann mir jemand helfen, wie ich diese Änderungen am Fenster verhindern kann oder die Windows-Tastaturkürzel abfangen und unterbinden kann?



  • In der WndProc wirst du wahrscheinlich nichts mehr machen können, da es dann bereits zu spät ist.
    Mit SetWindowsHookEx und einer LowLevelKeyboardProc-Funktion könntest du die Tasten abfangen (bei Keydown Überprüfung der Cursortasten und Check der Windowstasten).
    Allerdings glaube ich nicht, dass man dies machen sollte, wenn die Titelleiste des Fensters noch zu sehen ist. In dem Fall sollte man vermutlich nicht das Standardverhalten ändern. Das mag allerdings in deinem Fall anders aussehen.
    Bei einem „Vollbildmodus“ wird es unterschiedlich gehandhabt. Opera, Edge und der Windowsplayer minimieren das Fenster bei Win+Cursortaste unten (Standardverhalten), der VLC fängt dies komplett ab.



  • Okay, danke für die Tipps und Hinweise. Ich werde mir die Funktionen mal genauer anschauen, obwohl es der Aufwand wahrscheinlich nicht wert ist. Vielleicht sollte ich stattdessen lieber im maximierten Fenster generell die Titelleiste ausblenden, dann sollte sich das ja auch erledigt haben.

    Bezüglich einer Änderung des Standardverhaltens gebe ich dir grundsätzlich Recht, aber ich finde das Standardverhalten manchmal recht inkonsequent. Wenn ich einen Resize, sowie die Maximieren und Minimieren-Schaltfläche deaktiviere, sollte es sich eigtl auch nicht über Win + unten oder "Wiederherstellen" ändern lassen, denn ich hätte erwartet, dass hier auch einfach sowas wie SC_MINIMZE oder SC_RESTORE gesendet wird (zumal der "Wiederherstellen"-Menüeintrag ja auch ausgegraut ist). Win + M (für Minimieren) ist beispielsweise auch dadurch deaktiviert, wenn ich SC_MINIMIZE abfange. Win + D (für Desktop) ist da vielleicht noch was anderes, weil soweit ich weiß das Fenster da ja nicht minimiert, sondern lediglich versteckt wird. Allerdings fängt der Firefox das mittlerweile bei seinem Bild-in-Bild Modus auch ab. Aber das nur am Rande 😉



  • Ja, dann mach doch.


Anmelden zum Antworten