Was bestimmt den Monitor, auf dem meine App ausgeführt wird?


78

Ich benutze Windows und habe zwei Monitore.

Einige Anwendungen werden immer auf meinem primären Monitor gestartet, unabhängig davon, wo sie sich befanden, als ich sie geschlossen habe.

Andere starten immer auf dem sekundären Monitor, egal wo sie waren, als ich sie geschlossen habe.

Ist irgendwo eine Registrierungseinstellung vergraben, die ich manipulieren kann, um zu steuern, in welche Monitoranwendungen standardmäßig gestartet wird?

@rp: Ich habe Ultramon und bin damit einverstanden, dass es unverzichtbar ist, bis zu dem Punkt, dass Microsoft es kaufen und in ihr Betriebssystem integrieren sollte. Wie Sie bereits sagten, können Sie damit nicht den Standardmonitor steuern, auf dem ein Programm gestartet wird.


2
Ultramon ist ein Muss. Ich benutze es seit Jahren.
AMissico

Diese stark frequentierte Frage sieht allmählich aus wie eine Anzeige für Ultramon. DisplayFusion sollte ebenfalls erwähnt werden. Ich bin nicht mit dem Unternehmen verbunden, liebe einfach, was das Produkt für mich tut. Ein dritter bekannter ist "Actual Multiple Monitors"
zx81

1
@ zx81: Es ist erwähnenswert, dass ich Windows XP hatte, als ich dies in '08 schrieb. UltraMon war damals nützlich, aber ich kann unter neueren Windows-Versionen nicht dafür bürgen.
JosephStyons

Antworten:


45

Richtig geschriebene Windows-Apps, die ihren Speicherort von Lauf zu Lauf speichern möchten, speichern die Ergebnisse GetWindowPlacement()vor dem Herunterfahren und verwenden sie SetWindowPlacement()beim Start, um ihre Position wiederherzustellen.

Häufig speichern Apps die Ergebnisse GetWindowPlacement()in der Registrierung als REG_BINARYzur einfachen Verwendung.

Die WINDOWPLACEMENTRoute hat viele Vorteile gegenüber anderen Methoden:

  • Behandelt den Fall, in dem sich die Bildschirmauflösung seit dem letzten Durchlauf geändert hat: SetWindowPlacement()Stellt automatisch sicher, dass das Fenster nicht vollständig außerhalb des Bildschirms angezeigt wird
  • Speichert den Status (minimiert / maximiert), speichert aber auch die wiederhergestellte (normale) Größe und Position
  • Behandelt Desktop-Metriken korrekt, gleicht die Position der Taskleiste aus usw. (dh verwendet "Arbeitsbereichskoordinaten" anstelle von "Bildschirmkoordinaten" - Techniken, die auf dem Speichern von Bildschirmkoordinaten beruhen, können unter dem Problem "Lauffenster" leiden, bei dem immer ein Fenster angezeigt wird jedes Mal etwas niedriger, wenn der Benutzer oben auf dem Bildschirm eine Symbolleiste hat).

Schließlich berücksichtigen Programme, die die Fensterwiederherstellung ordnungsgemäß ausführen, den nCmdShowvon der Shell übergebenen Parameter. Dieser Parameter wird in der Verknüpfung festgelegt, mit der die Anwendung gestartet wird (Normal, Minimiert, Maximieren):

if(nCmdShow != SW_SHOWNORMAL)
    placement.showCmd = nCmdShow; //allow shortcut to override

Für Nicht-Win32-Anwendungen ist es wichtig sicherzustellen, dass die Methode, mit der Sie die Fensterposition speichern / wiederherstellen, letztendlich denselben zugrunde liegenden Aufruf verwendet. Andernfalls schreiben Sie (wie bei Java Swing setBounds()/ getBounds()problem) viel zusätzlichen Code Funktionen, die bereits in den WINDOWPLACEMENTFunktionen vorhanden sind , erneut zu implementieren .


Danke für die gute Antwort. Mit diesen Informationen kann ich zumindest einige Programme manuell so einstellen, dass sie an einem bestimmten Ort gestartet werden, wenn ich möchte.
JosephStyons

Es sollte auch beachtet werden, dass SetWindowPlacement () prüfen sollte, ob dieser Speicherort tatsächlich vorhanden ist. Ein häufiges Szenario besteht darin, einen Laptop in den Ruhezustand zu versetzen, während er an zwei Monitore angeschlossen ist, und ihn später mit nur einem zu aktivieren. In diesem Fall ist der virtuelle Bildschirmbereich erheblich kleiner.
JosephStyons

57

Folgendes habe ich gefunden. Wenn Sie möchten, dass eine App standardmäßig auf Ihrem sekundären Monitor geöffnet wird, gehen Sie wie folgt vor:

1. Open the application.
2. Re-size the window so that it is not maximized or minimized.
3. Move the window to the monitor you want it to open on by default.
4. Close the application.  Do not re-size prior to closing.
5. Open the application.
   It should open on the monitor you just moved it to and closed it on.
6. Maximize the window.

Die Anwendung wird jetzt standardmäßig auf diesem Monitor geöffnet. Wenn Sie es auf einen anderen Monitor umstellen möchten, führen Sie einfach die Schritte 1 bis 6 erneut aus.


1
Danke, das funktioniert wirklich. Ein Kommentar, den ich hinzufügen möchte, ist, dass Sie, wenn die App von einem Programm gestartet wird, z. B. IE starten, iexplore starten und den aufgelisteten TryingToHelp-Anweisungen folgen müssen. Es klappt. In meinem Fall habe ich ein geplantes Task-Programm, das den IE mit einer bestimmten URL als Parameter startet. Das Ändern der Größe und das Verschieben dieses vom Taskplaner gestarteten IE hat nicht geholfen.
Yantaq

Funktioniert bei Win7 leider nicht für mich. Die Schritte 1 bis 5 funktionieren, und wenn ich nicht maximiere, startet das Programm (TeXstudio) auf dem richtigen Monitor. Sobald ich maximiere und dann schließe, erfolgt der nächste Start auf dem anderen Display.
Maxim.K

Ich kann dies für einige Apps zum Laufen bringen, aber unter Windows 10 startet PowerShell immer auf meinem Laptop-Bildschirm, niemals auf dem externen Monitor, auf dem es gestartet werden soll.
Nate

1
Lassen Sie mich die folgende Bemerkung hinzufügen: In meinem Fall hat dies nicht funktioniert, als ich auf eine PDF-Datei doppelklickte. Dann fand ich heraus, dass es einen Unterschied macht, die Anwendung wirklich zu öffnen, anstatt auf eine zugehörige Datei zu doppelklicken. In diesem Fall funktionierte das Öffnen von Adobe Acrobat über das Startmenü und das Ausführen der von Ihnen beschriebenen Schritte (z. B. Verschieben des Fensters auf den gewünschten Monitor und anschließendes Schließen) einwandfrei. Stellen Sie außerdem sicher, dass das Anwendungsfenster vollständig auf den Zielbildschirm passt und sich nicht mit dem 2. Monitor überlappt, bevor Sie ihn schließen.
Matt

1
Das funktioniert nicht. Es erfordert die App, um ihre Einstellungen und Scheiße tatsächlich zu speichern, und viele Apps sind nicht richtig gestaltet. Sehr nervig ... aber ein Teil des Lebens.
AbstractDissonance

11

Holen Sie sich UltraMon. Schnell.

http://realtimesoft.com/ultramon/

Sie können nicht angeben, auf welchem ​​Monitor eine App gestartet wird, aber Sie können eine App mit einem Mausklick auf einen anderen Monitor verschieben und das Seitenverhältnis beibehalten. Es ist ein sehr praktisches Dienstprogramm.

Die meisten Programme beginnen dort, wo Sie sie zuletzt verlassen haben. Wenn Sie also zwei Monitore bei der Arbeit haben, aber nur einen zu Hause, können Sie Ihren Laptop zu Hause starten und die Apps nicht auf dem anderen Monitor sehen (der jetzt nicht vorhanden ist). Mit UltrMon können Sie diese verwaisten Apps auch schnell und einfach wieder auf den Hauptbildschirm verschieben.


Ich benutze UltraMon zu Hause und bei der Arbeit. Ich weiß wirklich nicht, wie Menschen ohne sie leben. lol. Kann bei Verwendung der Smart Taskbar manchmal etwas schuppig sein, funktioniert aber gut genug und oft genug, damit ich mich daran halten kann. - Kevin Fairchild
Kevin Fairchild

Was für eine klebrige Website. Es sind 2009 Leute! Aber interessantes Produkt. Danke für den Link :)

Ich bin genau in dieser Situation - ein Laptop mit zwei Monitoren bei der Arbeit, aber nur ein kleiner Laptop-Bildschirm, wenn ich weg bin. Es ist erstaunlich frustrierend, wenn eine Anwendung in einem Bereich geladen wird, der früher sichtbar war - MS Outlook ist einer der größten Straftäter. Ich werde eine Kopie von Ultramon bekommen und hoffentlich macht es das Leben ein bisschen einfacher. Vielen Dank!
SqlRyan

Wenn Software erwähnt werden soll, sollte DisplayFusion 2015 auf der Liste stehen. In Prefs / Window Locatoin können Sie angeben, wo bestimmte Apps geöffnet werden sollen. Ich finde es gut, dass die Liste mit aktuell geöffneten Programmen gefüllt ist, sodass Sie nicht nach ihnen suchen müssen.
zx81

Verwenden Sie [win] + [Pfeil], um Apps zu verschieben, die auf einem anderen Bildschirm "gefangen" sind, wenn die App scharfgestellt ist. Dadurch wird die App von Bildschirm zu Bildschirm verschoben. Stoppen Sie, wenn es in Sicht kommt. Funktioniert auf Win 7+
Ceekay

11

Es ist nicht genau die Antwort auf diese Frage, aber ich habe dieses Problem mit der Shift + Win + [left,right] arrow keysVerknüpfung behandelt. Sie können damit das aktuell aktive Fenster auf einen anderen Monitor verschieben.


Dies funktionierte für mich, aber ohne Umschalttaste, dh Win + [links, rechts] - half mir bei der Arbeit mit einem Monitor und einer App, die beim Fehlen eines fehlten!
Benommen

Wichtiger Hinweis: Wenn Sie diese Technik verwenden, speichern Fenster die aktuelle Fensterposition nicht. Sie müssen das Fenster mindestens einmal mit der Maus verschieben / in der Größe ändern, um dies zu erreichen.
Tim Pohlmann

4

Ich bin mir ziemlich sicher, dass der primäre Monitor der Standard ist. Wenn die App beim Schließen anständig codiert wurde, merkt sie sich, wo sie zuletzt war, und wird dort wieder geöffnet. Wie Sie bemerkt haben, handelt es sich jedoch nicht um ein Standardverhalten.

BEARBEITEN: Normalerweise mache ich den Speicherort in den Einstellungen der App. Wenn beim Laden kein Wert für sie vorhanden ist, wird standardmäßig die Mitte des Bildschirms angezeigt. Beim Schließen des Formulars wird seine Position aufgezeichnet. Auf diese Weise war es immer dort, wo es zuletzt war. Ich kenne jedoch keine einfache Möglichkeit, es anzuweisen, beim ersten Mal automatisch auf den zweiten Monitor zu starten.

- Kevin Fairchild


3

Wichtiger Hinweis: Wenn Sie sich an die Position Ihrer Anwendung erinnern und diese herunterfahren und dann an dieser Position erneut starten, beachten Sie, dass sich die Monitorkonfiguration des Benutzers möglicherweise geändert hat, während Ihre Anwendung geschlossen wurde.

Laptop-Benutzer ändern beispielsweise häufig ihre Anzeigekonfiguration. Beim Andocken befindet sich möglicherweise ein zweiter Monitor, der beim Abdocken verschwindet. Wenn der Benutzer eine Anwendung schließt, die auf dem zweiten Monitor ausgeführt wurde, und die Anwendung erneut öffnet, wenn der Monitor getrennt wird, wird das Fenster durch Wiederherstellen der vorherigen Koordinaten vollständig außerhalb des Bildschirms angezeigt.

Um herauszufinden, wie groß das Display wirklich ist, lesen Sie GetSystemMetrics.


2

Ich hatte dieses Problem mit Adobe Reader 9.0. Irgendwie hat das Programm vergessen, auf meinem rechten Monitor zu öffnen und wurde ständig auf meinem linken Monitor geöffnet. Bei den meisten Programmen können Sie es ziehen, den Bildschirm maximieren und dann schließen, damit es sich merkt. Nun, mit Adobe musste ich es ziehen und dann schließen, bevor ich es maximierte, damit Windows sich merken konnte, auf welchem ​​Bildschirm es beim nächsten Mal geöffnet werden sollte. Sobald Sie den richtigen Monitor eingestellt haben, können Sie ihn maximieren. Ich denke, das ist dumm, da sich fast alle Windows-Programme automatisch daran erinnern, ohne zu versuchen, eine Möglichkeit für XP zu finden, sich daran zu erinnern.


Hat die Frage nicht wirklich beantwortet, hat mir aber geholfen :)
DN

1

Daher stimme ich zu, dass es einige Apps gibt, die Sie so konfigurieren können, dass sie auf einem Bildschirm geöffnet werden, indem Sie den Bildschirm maximieren oder mit der rechten Maustaste klicken und ihn verschieben / seine Größe ändern, dann schließen und erneut öffnen. Es gibt jedoch andere, die nur auf dem Hauptbildschirm geöffnet werden.

Was ich getan habe, um das Problem zu beheben: Stellen Sie den Monitor, auf dem hartnäckige Apps geöffnet werden sollen, als Monitor 1 und den anderen Monitor als 2 ein und ändern Sie dann Ihren Monitor 2 als primären Monitor - damit Ihre Desktop-Einstellungen und die Startleiste erhalten bleiben. Hoffe das hilft.


0

Halten Sie mich nicht daran fest, aber ich bin mir ziemlich sicher, dass es von der Anwendung selbst abhängt. Ich weiß, dass viele immer auf dem Hauptmonitor geöffnet sind, einige wieder auf demselben Monitor geöffnet werden, auf dem sie zuvor ausgeführt wurden, und andere können Sie einstellen. Ich weiß zum Beispiel, dass ich Verknüpfungen zum Öffnen von Befehlsfenstern für bestimmte Verzeichnisse habe, und jedes hat in seinen Eigenschaften eine Option für den Speicherort, in dem das Fenster geöffnet werden soll. Während Outlook sich nur an den letzten Bildschirm erinnert und diesen öffnet, in dem es geöffnet war. Dann andere Apps Öffnen Sie in jedem Fenster, in dem sich der aktuelle Fokus befindet.

Ich bin mir also nicht sicher, ob es eine Möglichkeit gibt, jedem Programm mitzuteilen, wo es geöffnet werden soll. Hoffe das hilft einigen.


0

Ich habe festgestellt, dass die gestartete Anwendung möglicherweise auf diesem Bildschirm angezeigt wird, wenn ich auf einem Bildschirm eine Verknüpfung auf meinem Desktop platziere ( wenn sich diese App nicht neu positioniert).

Dies gilt auch für die Ausführung von Dingen im Windows Explorer. Wenn sich der Explorer auf einem Bildschirm befindet, wählt die gestartete Anwendung den zu verwendenden Monitor aus.

Nochmals - Ich denke, dies ist der Zeitpunkt, an dem die Startanwendung die Standardposition (Windows verwaltet) angibt. Die meisten Anwendungen scheinen dieses Standardverhalten in irgendeiner Weise zu überschreiben.

Ein einfaches Fenster, das so erstellt wurde, führt Folgendes aus:

hWnd = CreateWindow (windowClass, windowTitle, WS_VISIBLE | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, SW_SHOW, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL);


-3

Klicken Sie mit der rechten Maustaste auf die Verknüpfung und wählen Sie Eigenschaften aus. Stellen Sie sicher, dass Sie sich auf der Registerkarte "Verknüpfung" befinden. Aktivieren Sie das Dropdown-Feld RUN und ändern Sie es in Maximiert.

Dies kann beim Starten des Programms im Vollbildmodus auf dem primären Monitor hilfreich sein.


3
Dies beantwortet die Frage nicht wirklich, und dies ist eine alte Frage.
Ajean
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.