Erstellen Fenster größer als der desktop (display-Auflösung)
Muss ich die Größe eines Fensters ändern, die größer als die Bildschirmauflösung oder die Größe von desktop -, programmgesteuert & vorzugsweise auch manuell.
Seit MS-Windows XP/Vista verbietet ein Fenster größer als der Bildschirm, hat jemand irgendwelche Ideen, um diese Einschränkung zu umgehen?
Ich versucht zu machen, pan-Effekt auf einem laptop, um mir mehr Raum zu arbeiten. Einen älteren laptop mit einem kleineren LCD-Größe haben eine solche Funktion.
Sehen:
http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/98/Q_21832063.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, um die Größe eines Fensters ändern, dass Sie nicht selbst (und ohne Hilfe jede Art von Haken), können Sie mithilfe der Windows-API SetWindowPos mit dem SWP_NOSENDCHANGING (0x0400) - flag gesetzt:
Dies verhindert, dass die Nachricht WM_WINDOWPOSCHANGING gesendet werden, die ist, was löst die WM_GETMINMAXINFO-Beschränkung. Jede andere Auslegung der Fenster bewirkt die Beschränkung auf snap das Fenster zurück auf den desktop eingeschränkt Größen, wie die Nachricht gesendet wird und die Größe des Fensters erzwungen.
Fenster Resizer (C#)
Folgende ist ein kleines Beispiel-Programm, das Editor, um die Größe 6000x6000 (ändern Sie die Zeichenfolge "Untitled - Notepad", um den Titel des Fensters, dessen Größe Sie ändern möchten, oder nehmen Sie im Fenster name und gewünschte Größe aus der command line args)
Einschränkungen und Vorsichtsmaßnahmen
Dieser Ansatz ist in der Regel funktional, aber es gibt eine Reihe von Einschränkungen, die möglicherweise verhindern, dass ein Fenster die Größe ändert, oder geändert in irgendeiner Weise nützlich.
Sicherheit
Beginnend mit Windows Vista hat Microsoft implementiert eine Erhöhung der Sicherheit rund um Fenster Nachrichten. Eine ausführbare Datei kann nur interagieren mit windows auf oder unter seiner eigenen Sicherheitskontext. Zum Beispiel, um die Größe des "Computer Management" - Fenster (das läuft immer erhöht), dieses Programm würde haben zu laufen, erhöht, wie gut.
Feste Windows-und layout-Logik
Fenster Größe, können durchgesetzt werden passiv oder aktiv durch ein Programm. Ein Fenster mit einer Größe durchgesetzt passiv legt die anfängliche Größe und macht einfach keine Möglichkeit für den Benutzer, um die Größe des Fensters (z.B., keine Größe grip control). Diese Fenster können in der Regel in der Größe verändert werden, indem Sie eine Nachricht, wie beschrieben, aber, fehlt die layout-Logik, wird nicht zeigen etwas anderes, dass zusätzliche leere client-Bereich.
Windows mit aktiv Durchsetzung überwachen Sie die Größe, entweder durch das abfangen der windows-Nachrichten wie WM_SIZE -, oder in mehr anspruchsvolle layout-Logik. Diese Fenster können akzeptieren die Nachricht, aber einschränken oder begrenzen Sie die endgültige Größe, in Ihren eigenen code.
In jedem Fall, dass Windows mit den festen Größen in der Regel fehlt jede layout-Logik zu nutzen, größere Größen, so dass, selbst wenn Sie kann Kraft, ändern der Größe, Sie werden keine Vorteile.
WPF
Den
Window
Klasse in WPF hat einHwndSource
Griffe Fenster-Nachrichten gesendet, um das WPF-Fenster. Die private MethodeLayoutFilterMessage
fängt dieWM_SYSCOMMAND
,WM_SIZING
,WM_WINDOWPOSCHANGING
, undWM_SIZE
Nachrichten. In diesem Fall, dieWM_SIZE
Nachricht wird dann behandelt, indem die privateProcess_WM_SIZE
die in der Tat, umgeht dieNOSENDCHANGING
Flagge und verändert dieRenderSize
des WPF-client-Bereich. Dies ist Teil eines umfassenden Prozesses der Anpassung der legacy-Win32-Nachrichten in WPF-Veranstaltungen.Der Netto-Effekt ist, dass die Win32 - host Fenster in der Größe geändert wird (es sei denn, SizeToContent eingestellt ist SizeToContent.WidthAndHeight), aber die WPF render-Bereich gesperrt, der desktop-Bereich, als wenn die NOSENDCHANGING flag nicht gesetzt. Wenn der obige code-Beispiel für eine WPF-Anwendung, können Sie sehen, die 6000x6000 Fenster im Aero Peek von der task-Leiste oder die Fenster-Vorschau in der Windows-Tab-switcher, aber Sie können auch sehen, die WPF-Inhalt und layout-Logik, die ist abgeschnitten, um den desktop-Bereich. Auf diese Weise wird die WPF-Fenster ist wie die aktiv durchgesetzt werden Fenster, sondern eher als Durchsetzung einer bestimmten Größe, erzwingt eine bestimmte maximale (für RenderArea) und berücksichtigt nicht die
WM_WINDOWPOSCHANGING
Nachricht.Wenn es Ihr eigenen app und du host die WPF innerhalb einer Windows Forms Fenster (über
ElementHost
) Sie können die Größe der Fenster und die WPF-Inhalt, wird die Achtung der größer-als-desktop-Windows-Form-Fenster.Anderen frameworks
Anderen frameworks wie GTK und Qt kann oder kann nicht erzwingen, Größe, Verhalten und beschränkt, und kann verschiedene workarounds möglich, zu überwinden diese Grenzen. Ein bestimmtes Programm kann ignorieren, umzuschreiben, oder-bypass ein Fenster mit der Meldung und ein framework durchsetzen kann es über eine ganze Klasse von Anwendungen wie WPF oben.
Mehr über die SetWindowPos-API:
Bezugsquelle für
Process_WM_SIZE
Methode derHwndSource
:http://referencesource.microsoft.com/#PresentationCore/Core/CSharp/System/Windows/Interop/HwndSource.cs,da4aa32ad121c1b9,references
Dieser code in C# funktioniert, was Sie Fragen. Das Fenster ist viel breiter als der desktop.
base.WndProc(ref m);
. Ohne diese, ich glaube, dass die Antwort nutzlos istEtwas wie den folgenden code in Eure WinProc();
Kann eine Anwendung diese Nachricht überschreiben Sie das Fenster standardmäßig maximiert die Größe und position, oder seine Standard minimale oder maximale tracking-Größe.
Wenn Sie über eine Grafikkarte mit der Möglichkeit der Verbindung mehr als einen Bildschirm, eine andere Problemumgehung ist die Einrichtung Ihres Systems, als ob es zwei Bildschirme neben einander. Dann können Sie die Größe Ihrer Fenster, um die Größe der beiden Bildschirme zusammen.
Nur die empfohlenen Bildschirmauflösungen aufgelistet sind. Für weitere Einstellungen klicken Sie auf die
Advanced
- Taste auf derSettings
Registerkarte, klicken Sie auf dieAdapter tab
, und klicken Sie dann aufList all Modes
. Wählen Sie die Auflösung, Farbsättigung, und die refresh rate, die Sie wollen.Habe ich habe es einfach gemacht, hier kann man die Antwort finden Sie im letzten Punkt.
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/display_change_screen_resolution.mspx?mfr=true
Für den speziellen Fall, dass ein mehr-Bildschirm-freundliche Ansicht der MSDN oder auf einer anderen Seite (wie StackOverflow), die schlechte Nutzung der Bildschirmfläche, würde ich vorschlagen, anwenden eines benutzerdefinierten Stylesheets auf der Seite, mit einem tool wie IE7Pro (IE), Greasemonkey (Firefox), Stilvolle (Fireox), oder die eingebaute stylesheet-picker in Opera.
ok, ich habe versucht, verwenden Sie Tastenkombinationen zum verschieben, Größe ändern windows. Aber system bewegt sich automatisch windows wieder zum sichtbaren Bereich des desktop in meinem XP.
Ich habe auch versucht SetWindowPos-API, und keine hilft.
Die beste Gelegenheit wird sein, schreiben einen Video-Treiber, aber vielleicht braucht es mehr Studie.
Die 360 desktop-Ansprüche, die Sie erweitern können desktop horizontal.
Aber eigentlich ist es nur verschieben Sie die aktuelle desktop in einer virtuellen breiteren Raum. Alle Fenster im inneren immer noch die Beschränkung von nicht größer als die Bildschirmauflösung.
Video-Treiber die Einstellung der Bildschirmauflösung(ja, müssen compatibile zu lcd/crt-Bildschirm-Fähigkeit), und Windows hat limit-Fenster-Größe von dieser Schwellenwerte.
Ich will einfach nur arbeiten, um in den user-space-API.
Die Größe des Fensters scheint abhängig zu sein, auf Desktop-Größe, nicht die Bildschirm-Auflösung, aber die Desktop-entspricht der Auflösung. Der trick könnte sein, ändern Sie die Desktop-Größe oder von dort aus starten.
Eine Weile zurück, die ein Entwickler namens Robert Bresner (seine website) ein Produkt namens sDesk (Download von hier) die erweiterte Windows über die Bildschirm-Auflösung.
Den original-homepage von SDesk software ist hier archiviert gibt Es keine aktuellen Seite im Internet (die ich finden konnte), aber diese version ist der Zugriff über die Zeitmaschine, welche caches eine Menge im Internet.
Den SDesk Produkt ist freeware. Keine source-code enthalten war, obwohl. Sie könnten besuchen Sie seine Kontakt-Seite (steht auch in der archivierten version) zu Fragen, ob die Quelle vorhanden ist oder erworben werden kann, für Ihre Forschung.
Musste ich schieben Teil des Fensters vom oberen Rand des Bildschirms und ich war fnally in der Lage, es zu tun mit dieser AutoHotKey-Skript:
(Ich wollte, um zu maximieren das editor-Bereich von VSCode vollständig ausblenden der Titelleiste und die Registerkarten im Abschnitt,, die nicht konfigurierbar sind, in das Programm selbst.)