¿Qué determina el monitor en el que se ejecuta mi aplicación?

78

Estoy usando Windows y tengo dos monitores.

Algunas aplicaciones siempre se iniciarán en mi monitor principal, sin importar dónde estuvieran cuando las cerré.

Otros siempre comenzarán en el monitor secundario , sin importar dónde estuvieran cuando los cerré.

¿Hay una configuración de registro escondida en algún lugar, que pueda manipular para controlar qué aplicaciones de monitor se inician de forma predeterminada?

@rp: Tengo Ultramon, y estoy de acuerdo en que es indispensable, hasta el punto de que Microsoft debería comprarlo e incorporarlo a su SO. Pero como dijiste, no te permite controlar el monitor predeterminado en el que se inicia un programa.

JosephStyons
fuente
2
Ultramon es una utilidad imprescindible. Lo he estado usando por años.
AMissico
Esta pregunta de alto tráfico está empezando a parecer un anuncio de Ultramon. DisplayFusion también debería mencionarse. No estoy asociado con la empresa, me encanta lo que el producto hace por mí. Un tercero conocido es "Monitores múltiples reales"
zx81
1
@ zx81: Vale la pena señalar que cuando escribí esto en el '08, tenía windows xp. UltraMon fue útil entonces, pero no puedo garantizarlo en versiones más recientes de Windows.
JosephStyons

Respuestas:

45

Las aplicaciones de Windows escritas correctamente que desean guardar su ubicación de ejecución en ejecución guardarán los resultados GetWindowPlacement()antes de apagarse y luego se usarán SetWindowPlacement()al iniciar para restaurar su posición.

Con frecuencia, las aplicaciones almacenarán los resultados GetWindowPlacement()en el registro REG_BINARYpara facilitar su uso.

La WINDOWPLACEMENTruta tiene muchas ventajas sobre otros métodos:

  • Maneja el caso en el que la resolución de la pantalla cambió desde la última ejecución: SetWindowPlacement()se asegurará automáticamente de que la ventana no esté completamente fuera de la pantalla
  • Guarda el estado (minimizado / maximizado) pero también guarda el tamaño y la posición restaurados (normales)
  • Maneja las métricas del escritorio correctamente, compensando la posición de la barra de tareas, etc. (es decir, utiliza "coordenadas del espacio de trabajo" en lugar de "coordenadas de la pantalla": las técnicas que se basan en guardar las coordenadas de la pantalla pueden sufrir el problema de las "ventanas móviles" donde siempre aparecerá una ventana un poco más bajo cada vez si el usuario tiene una barra de herramientas en la parte superior de la pantalla).

Finalmente, los programas que manejan correctamente la restauración de ventanas tendrán en cuenta el nCmdShowparámetro pasado desde el shell. Este parámetro se establece en el acceso directo que inicia la aplicación (Normal, Minimizado, Maximizar):

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

Para las aplicaciones que no son de Win32, es importante asegurarse de que el método que está utilizando para guardar / restaurar la posición de la ventana eventualmente use la misma llamada subyacente, de lo contrario (como el problema setBounds()/ de Java Swing getBounds()) terminará escribiendo mucho código adicional para volver a implementar la funcionalidad que ya está en las WINDOWPLACEMENTfunciones.

David Citron
fuente
Gracias por la buena respuesta. Con esta información, al menos puedo configurar manualmente algunos programas para que se inicien en un lugar en particular, si quiero.
JosephStyons
También debe tenerse en cuenta que SetWindowPlacement () debe verificar si esa ubicación realmente existe. Un escenario común es poner una computadora portátil en suspensión mientras está conectada a dos monitores y luego activarla más tarde con solo uno, en cuyo caso el espacio de la pantalla virtual es dramáticamente más pequeño.
JosephStyons
57

Esto es lo que encontré. Si desea que se abra una aplicación en su monitor secundario de forma predeterminada, haga lo siguiente:

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.

La aplicación se abrirá ahora en este monitor de forma predeterminada. Si desea cambiarlo a otro monitor, simplemente siga los pasos 1-6 nuevamente.

Jhonny D. Cano -Leftware-
fuente
1
Gracias, esto realmente funciona. Un comentario que me gustaría agregar es que si la aplicación se inicia mediante un programa, por ejemplo, iniciar IE, debe iniciar iexplore y seguir lo que TryingToHelp enumera. funciona. en mi caso, tengo un programa de tareas programadas que lanza IE con una URL determinada como parámetro. redimensionar y mover este IE lanzado por el programador de tareas no ayudó.
yantaq
Desafortunadamente, no me funciona en Win7. Los pasos 1-5 funcionan, y si no maximizo, el programa (TeXstudio) se inicia en el monitor adecuado. Tan pronto como maximice y luego cierre, el próximo inicio ocurrirá en la otra pantalla.
Maxim.K
Puedo hacer que esto funcione para algunas aplicaciones, pero en Windows 10 PowerShell siempre se inicia en la pantalla de mi computadora portátil, nunca en el monitor externo en el que quiero que comience.
Nate
1
Permítanme agregar el siguiente comentario: En mi caso, cuando hice doble clic en un archivo .PDF, esto no funcionó. Luego descubrí que realmente hace una diferencia abrir la aplicación en lugar de hacer doble clic en un archivo asociado. En este caso, abrir Adobe Acrobat a través del menú de inicio y luego seguir los pasos que describió (es decir, mover la ventana al monitor deseado y luego cerrarla) funcionó bien. También asegúrese de que la ventana de la aplicación se ajuste completamente a la pantalla de destino y no se superponga al segundo monitor antes de cerrarlo.
Matt
1
Esto no funciona. NECESITA LA APLICACIÓN para guardar realmente su configuración y mierda y muchas aplicaciones no están diseñadas correctamente. Muy molesto ... pero parte de la vida.
AbstractDissonance
11

Obtén UltraMon. Con rapidez.

http://realtimesoft.com/ultramon/

No le permite especificar en qué monitor se inicia una aplicación, pero le permite mover una aplicación a otro monitor y mantener su relación de aspecto intacta con un clic del mouse. Es una utilidad muy útil.

La mayoría de los programas comenzarán donde los dejó por última vez. Entonces, si tiene dos monitores en el trabajo, pero solo uno en casa, es posible encender su computadora portátil en casa y no ver las aplicaciones ejecutándose en el otro monitor (que ahora no está allí). UltrMon también te permite mover esas aplicaciones huérfanas a la pantalla principal de forma rápida y sencilla.

rp.
fuente
Utilizo UltraMon en casa y en el trabajo. No sé cómo la gente vive sin él, de verdad. lol. Puede ser un poco inestable a veces cuando se usa la barra de tareas inteligente, pero funciona lo suficientemente bien y con la frecuencia suficiente para que me quede con ella. - Kevin Fairchild
Kevin Fairchild
Qué sitio web de mal gusto. ¡Son 2009 personas! Pero producto interesante. Gracias por el enlace :)
Estoy en esta situación exacta: una computadora portátil con dos monitores en el trabajo, pero solo una pequeña pantalla de computadora portátil cuando no estoy. Es asombrosamente frustrante cuando una aplicación se carga en un área que solía ser visible: MS Outlook es uno de los mayores infractores. Conseguiré una copia de Ultramon y espero que me haga la vida un poco más fácil. ¡Gracias!
SqlRyan
Si se va a mencionar el software, en 2015, DisplayFusion debería estar en la lista. En Prefs / Window Locatoin, puede especificar dónde deben abrirse aplicaciones específicas. Me gusta que la lista esté poblada por programas abiertos actualmente, por lo que no tiene que buscarlos.
zx81
Para mover aplicaciones que están 'atrapadas' en otra pantalla, use [win] + [flecha] cuando la aplicación esté enfocada. Esto moverá la aplicación de una pantalla a otra. Deténgase cuando esté a la vista. Funciona en Win 7+
Tim Schimandle
11

No es exactamente la respuesta a esta pregunta, pero resolví este problema con el Shift + Win + [left,right] arrow keysatajo. Puede mover la ventana actualmente activa a otro monitor con ella.

Croo
fuente
Esto funcionó para mí, pero sin la tecla Shift, es decir, Win + [izquierda, derecha], ¡me ayudó cuando trabajaba con un monitor y la aplicación se abría cuando faltaba uno!
Aturdido
Nota importante: si usa esta técnica, Windows no guardará la posición actual de la ventana. Tienes que mover / cambiar el tamaño de la ventana al menos una vez con el mouse para lograr esto.
Tim Pohlmann
4

Estoy bastante seguro de que el monitor principal es el predeterminado. Si la aplicación se codificó de manera decente, cuando se cierre, recordará dónde estaba por última vez y se volverá a abrir allí, pero, como habrá notado, no es un comportamiento predeterminado.

EDITAR: La forma en que suelo hacerlo es tener la ubicación almacenada en la configuración de la aplicación. En carga, si no hay ningún valor para ellos, se establece por defecto en el centro de la pantalla. Al cerrar el formulario, registra su posición. De esa manera, cada vez que se abre, es donde estaba la última vez. Sin embargo, no conozco una forma sencilla de decirle que se inicie en el segundo monitor la primera vez automáticamente.

- Kevin Fairchild

Kevin Fairchild
fuente
3

Nota importante: si recuerda la posición de su aplicación y la apaga y luego la inicia nuevamente en esa posición, tenga en cuenta que la configuración del monitor del usuario puede haber cambiado mientras su aplicación estaba cerrada.

Los usuarios de portátiles, por ejemplo, cambian con frecuencia la configuración de su pantalla. Cuando está acoplado, puede haber un segundo monitor que desaparece cuando se desacopla. Si el usuario cierra una aplicación que se estaba ejecutando en el segundo monitor y vuelve a abrir la aplicación cuando se desconecta el monitor, restaurar la ventana a las coordenadas anteriores la dejará completamente fuera de la pantalla.

Para averiguar qué tan grande es realmente la pantalla, consulte GetSystemMetrics.

stevex
fuente
2

Entonces tuve este problema con Adobe Reader 9.0. De alguna manera, el programa se olvidó de abrirse en mi monitor derecho y se abría constantemente en mi monitor izquierdo. La mayoría de los programas le permiten arrastrarlo, maximizar la pantalla y luego cerrarlo y lo recordará. Bueno, con Adobe, tuve que arrastrarlo y luego cerrarlo antes de maximizarlo, para que Windows recuerde en qué pantalla abrirlo la próxima vez. Una vez que lo configura en el monitor correcto, puede maximizarlo. Creo que esto es estúpido, ya que casi todos los programas de Windows lo recuerdan automáticamente sin intentar manipular una forma para que XP lo recuerde.


fuente
Realmente no respondí la pregunta, pero me ayudó :)
DN
1

Así que estoy de acuerdo en que hay algunas aplicaciones que puede configurar para que se abran en una pantalla maximizando o haciendo clic derecho y moviendo / dimensionando la pantalla, luego cierre y vuelva a abrir. Sin embargo, hay otros que solo se abrirán en la pantalla principal.

Lo que he hecho para resolverlo: configure el monitor en el que prefiere que se abran las aplicaciones obstinadas, como el monitor 1 y el otro monitor como 2, luego cambie su monitor 2 para que sea el principal, de modo que la configuración del escritorio y la barra de inicio permanezcan. Espero que esto ayude.

Mi llave
fuente
0

No me limites a esto, pero estoy bastante seguro de que depende de la aplicación en sí. Sé que muchos siempre se abren en el monitor principal, algunos se volverán a abrir en el mismo monitor en el que se ejecutaron anteriormente y algunos se pueden configurar. Sé, por ejemplo, que tengo accesos directos para abrir ventanas de comandos a directorios particulares, y cada uno tiene una opción en sus propiedades a la ubicación para abrir la ventana. Mientras que Outlook solo recuerda y abre en la última pantalla en la que se abrió. Luego, otras aplicaciones abrir en cualquier ventana en la que se encuentre el foco actual.

Así que no estoy seguro de que haya una manera de decirle a cada programa dónde abrir. Espero que ayude a algunos.

Jacob Schoen
fuente
0

Me di cuenta de que si coloco un acceso directo en mi escritorio en una pantalla, la aplicación iniciada puede aparecer en esa pantalla ( si esa aplicación no se reposiciona).

Esto también se aplica a la ejecución de cosas desde el Explorador de Windows: si el Explorador está en una pantalla, la aplicación iniciada seleccionará ese monitor para usar.

Nuevamente, creo que esto es cuando la aplicación de inicio especifica la posición predeterminada (administrada por Windows). La mayoría de las aplicaciones parecen anular este comportamiento predeterminado de alguna manera.

Una ventana simple creada así hará esto:

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

Cerdo hormiguero
fuente
-3

Haga clic derecho en el acceso directo y seleccione propiedades. Asegúrate de estar en la pestaña "Acceso directo". Seleccione el cuadro desplegable EJECUTAR y cámbielo a Maximizado.

Esto puede ayudar a iniciar el programa en pantalla completa en el monitor principal.

aburrido
fuente
3
En realidad, esto no responde a la pregunta, y esta es una pregunta antigua .
Ajean