Скопировал их из других ответов в Интернете и скомпилировал их здесь для вашего удобства (добавлены вещи для удобства чтения):
- Откройте приложение.
- Измените размер окна, чтобы оно не было развернуто или свернуто.
- Переместите окно на монитор, который вы хотите открыть по умолчанию.
- Закройте приложение. Не изменяйте размер до закрытия.
- Откройте приложение.
Он должен открыться на мониторе, на который вы только что его перенесли, и закрыть его.
- Максимизируйте окно.
Причина, почему это работает, в два раза.
Правильно написанные приложения для Windows, которые хотят сохранить свое местоположение от запуска к запуску, сохранят результаты GetWindowPlacement()
перед выключением, а затем при запуске используют SetWindowPlacement()
чтобы восстановить свое положение.
Часто приложения будут хранить результаты GetWindowPlacement()
в реестре как REG_BINARY
для удобства использования.
У WINDOWPLACEMENTroute
много преимуществ по сравнению с другими методами:
Обрабатывает случай, когда разрешение экрана изменилось с момента последнего запуска: SetWindowPlacement() автоматически гарантирует, что окно не полностью за пределами экрана. Сохраняет состояние (свернуто / развернуто), но также сохраняет восстановленные (нормальные) размер и положение. Правильно обрабатывает метрики рабочего стола, компенсация положения панели задач и т. д. (т. е. использует "координаты рабочего пространства" вместо "экранных координат") - методы, основанные на сохранении экранных координат, могут страдать от проблемы "ходящих окон", когда окно всегда будет появляться немного ниже если у пользователя есть панель инструментов в верхней части экрана).
Наконец, программы, которые правильно обрабатывают восстановление окна, будут учитывать параметр nCmdShow, передаваемый из оболочки. Этот параметр устанавливается в ярлыке, который запускает приложение (Normal, Minimized, Maximize):
if(nCmdShow != SW_SHOWNORMAL)
placement.showCmd = nCmdShow; //allow shortcut to override
Для приложений, отличных от Win32, важно быть уверенным, что метод, который вы используете для сохранения / восстановления положения окна, в конечном итоге использует тот же базовый вызов, в противном случае (например, setBounds()/getBounds()
Java Swing) вы в конечном итоге получите написание большого количества дополнительного кода для повторной реализации функциональности, которая уже есть в функциях WINDOWPLACEMENT
.
В качестве альтернативы вы можете использовать другие приложения, такие как: http://realtimesoft.com/ultramon/
Или просто перенесите приложение с монитора на монитор с помощью сочетания клавиш Shift + Win + [влево, вправо]. С его помощью вы можете переместить текущее активное окно на другой монитор.
Я надеюсь, что эти ответы будут вам полезны.
Ссылки:Как заставить приложения открываться на правильном мониторе при использовании нескольких мониторов?
https://stackoverflow.com/questions/52755/what-determines-the-monitor-my-app-runs-on http://www.tenforums.com/general-support/14348-forcing-program-open-second -monitor-а-чем-main.html