Что определяет монитор моего приложения?

Я использую Windows, и у меня есть два монитора.

Некоторые приложения всегда будут запускаться на моем основном мониторе, независимо от того, где они были, когда я их закрыл.

Другие всегда будут запускаться на вторичном мониторе, независимо от того, где они были, когда я их закрыл.

Есть ли где-то параметр реестра, который я могу манипулировать, чтобы контролировать, какие приложения для мониторинга запускаются по умолчанию?

@rp: У меня есть Ultramon, и я согласен с тем, что это необходимо, до такой степени, что Microsoft должна его купить и включить в свою ОС. Но, как вы сказали, он не позволяет вам контролировать монитор по умолчанию, в который запускается программа.

Ответ 1

Правильно написанные приложения Windows, которые хотят сохранить свое местоположение от запуска до запуска, сохраняют результаты GetWindowPlacement() перед закрытием, затем используйте SetWindowPlacement() при запуске, чтобы восстановить их положение.

Часто приложения сохраняют результаты GetWindowPlacement() в реестре как REG_BINARY для удобства использования.

Маршрут WINDOWPLACEMENT имеет много преимуществ по сравнению с другими способами:

  • Обрабатывает случай, когда разрешение экрана изменилось с момента последнего запуска: SetWindowPlacement() автоматически гарантирует, что окно не полностью вне экрана
  • Сохраняет состояние (минимизировано/максимизировано), но также сохраняет восстановленный (нормальный) размер и положение
  • Правильно обрабатывает метрики рабочего стола, компенсирует положение панели задач и т.д. (т.е. использует "координаты рабочего пространства" вместо "координаты экрана" - методы, которые полагаются на сохранение экранных координат, могут пострадать от проблемы "ходьбы", где окно всегда будет казаться немного ниже каждый раз, если у пользователя есть панель инструментов в верхней части экрана).

Наконец, программы, которые правильно обрабатывают восстановление окна, будут учитывать параметр nCmdShow, переданный из оболочки. Этот параметр установлен в ярлыке, запускающем приложение (Normal, Minimized, Maximize):

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

Для приложений, отличных от Win32, важно убедиться, что метод, который вы используете для сохранения/восстановления позиции окна, в конечном итоге использует один и тот же базовый вызов, в противном случае (например, проблема Java Swing setBounds()/getBounds()), ll в конечном итоге написал много дополнительного кода для повторной реализации функциональных возможностей, которые уже существуют в функциях WINDOWPLACEMENT.

Ответ 2

Вот что я нашел. Если вы хотите, чтобы приложение открывалось на вашем вторичном мониторе по умолчанию, выполните следующие действия:

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.

Теперь приложение будет открыто на этом мониторе. Если вы хотите изменить его на другой монитор, просто повторите шаги 1-6.

Ответ 3

Получите UltraMon. Быстро.

http://realtimesoft.com/ultramon/

Он не позволяет вам указать, на каком мониторе запускается приложение, но оно позволяет перемещать приложение на другой монитор и сохранять неизменное соотношение сторон одним щелчком мыши. Это очень удобная утилита.

Большинство программ начнутся там, где вы в последний раз оставили их. Поэтому, если у вас есть два монитора на работе, но только один у себя дома, вы можете начать работать с ноутбуком дома и не видеть приложения, запущенные на другом мониторе (которого сейчас нет). UltrMon также позволяет быстро и легко перемещать эти приложения-сироты обратно на главный экран.

Ответ 4

Это не совсем ответ на этот вопрос, но я столкнулся с этой проблемой с ярлыком Shift + Win + [left,right] arrow keys. Вы можете переместить текущее активное окно на другой монитор с ним.

Ответ 5

Я уверен, что основной монитор по умолчанию. Если приложение было закодировано прилично, когда оно было закрыто, оно будет помнить, где оно было в последний раз и будет открываться снова, но, как вы заметили, это не поведение по умолчанию.

РЕДАКТИРОВАТЬ: Как я обычно делаю это, это местоположение хранится в настройках приложения. При загрузке, если для них нет значения, по умолчанию используется центр экрана. При закрытии формы он записывает свою позицию. Таким образом, всякий раз, когда он открывается, он там, где он был последним. Однако я не знаю простого способа сказать, чтобы он запускался на второй монитор в первый раз автоматически.

- Кевин Фэрчайлд

Ответ 6

Важное примечание. Если вы запомнили позицию своего приложения и завершили работу, а затем снова запустились в этой позиции, имейте в виду, что конфигурация пользовательского монитора могла быть изменена, когда приложение закрыто.

Пользователи ноутбуков, например, часто меняют свою конфигурацию дисплея. При состыковании может быть 2-й монитор, который исчезает при отсоединении. Если пользователь закрывает приложение, которое было запущено на втором мониторе, и повторное открытие приложения при отключении монитора, восстановление окна в предыдущие координаты оставит его полностью за пределами экрана.

Чтобы понять, насколько велик дисплей, посмотрите GetSystemMetrics.

Ответ 7

Итак, у меня была эта проблема с Adobe Reader 9.0. Как-то программа забыла открыть на моем правом мониторе и последовательно открывалась на моем левом мониторе. Большинство программ позволяют вам перетащить его, увеличить экран, а затем закрыть его, и он запомнит. Ну, с Adobe, мне пришлось перетащить ее, а затем закрыть ее, прежде чем ее максимизировать, чтобы Windows помнила, какой экран откроет ее в следующий раз. Как только вы установите его на правильный монитор, вы можете его максимизировать. Я думаю, что это глупо, поскольку почти все программы Windows автоматически запоминают его, не пытаясь выстроить способ запоминания XP.

Ответ 8

Итак, я согласен, что есть некоторые приложения, которые можно настроить для открытия на одном экране, максимизируя или щелкая правой кнопкой мыши и перемещая/определяя размер экрана, затем закрывайте и снова открывайте. Однако есть и другие, которые будут открываться только на главном экране.

Что я сделал для решения: установите монитор, который вы предпочитаете, чтобы открытые приложения открывались, а монитор 1 и ваш другой монитор равны 2, затем измените ваш монитор 2 на основной - так что ваши настройки рабочего стола и панель запуска остаются. Надеюсь это поможет.

Ответ 9

Не держите меня за это, но я уверен, что это зависит от приложения. Я знаю, что многие всегда открываются на главном мониторе, некоторые снова откроются на том же мониторе, в котором они были ранее запущены, и некоторые из них вы можете установить. Я знаю, например, у меня есть ярлыки для открытия командных окон в определенных каталогах, и каждый из них имеет свой параметр в своих свойствах для местоположения, чтобы открыть окно. Хотя Outlook просто запоминается и открывается на последнем экране, он был открыт. Затем другие приложения открыть в каком бы окне окно текущего фокуса.

Поэтому я не уверен, что есть способ рассказать каждую программу, где ее можно открыть. Надеюсь, что это поможет.

Ответ 10

Я заметил, что если я нажму ярлык на своем рабочем столе на одном экране, на этом экране может появиться запущенное приложение (, если, что приложение не пересаживается).

Это также относится к работе с проводником Windows - если Explorer находится на одном экране, запущенное приложение выбирает этот монитор для использования.

Опять же - я думаю, что это когда при запуске приложения задается позиция по умолчанию (управляемая окнами). Большинство приложений, похоже, каким-то образом переопределяют это поведение по умолчанию.

Простое окно, созданное таким образом, сделает следующее:

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

Ответ 11

Щелкните правой кнопкой мыши ярлык и выберите свойства. Убедитесь, что вы находитесь на вкладке "Ярлык". Выберите раскрывающийся список RUN и измените его на Maximized.

Это может помочь запустить программу в полноэкранном режиме на основном мониторе.