Що визначає монітор, на якому працює моя програма?


78

Я використовую Windows і маю два монітори.

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

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

Чи є десь захований параметр реєстру, яким я можу керувати, щоб контролювати, які програми монітора запускаються за замовчуванням?

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


2
Ultramon - це обов’язкова програма. Я використовую його роками.
AMissico,

Це запитання з великим трафіком починає виглядати як реклама Ultramon. Слід також згадати DisplayFusion. Я не пов'язаний з компанією, просто люблю те, що продукт робить для мене. Третім відомим є "Фактичні кілька моніторів"
zx81,

1
@ zx81: Варто зазначити, що коли я писав це ще в '08 році, у мене був Windows XP. Тоді UltraMon був корисний, але я не можу за нього поручитися в останніх версіях Windows.
JosephStyons

Відповіді:


45

Правильно написані програми Windows, які хочуть зберегти своє місце розташування від запуску до запуску, збережуть результати GetWindowPlacement()перед вимкненням, а потім використовують SetWindowPlacement()під час запуску, щоб відновити своє положення.

Часто програми зберігають результати GetWindowPlacement()реєстру як REG_BINARYзручні для використання.

WINDOWPLACEMENTМаршрут має багато переваг по порівнянні з іншими методами:

  • Опрацьовує випадок, коли роздільна здатність екрану змінювалася з часу останнього запуску: SetWindowPlacement()автоматично гарантує, що вікно не буде повністю поза екраном
  • Зберігає стан (мінімізований / максимізований), але також зберігає відновлений (нормальний) розмір і положення
  • Правильно обробляє метрики робочого столу, компенсуючи положення панелі завдань тощо (тобто використовує "координати робочої області" замість "координати екрана" - методи, які покладаються на збереження координат екрана, можуть страждати від проблеми "ходьби вікон", де вікно завжди буде відображатися щоразу, коли користувач має панель інструментів у верхній частині екрана).

Нарешті, програми, які правильно обробляють відновлення вікон, враховуватимуть nCmdShowпараметр, переданий із оболонки. Цей параметр встановлюється в ярлику, який запускає програму (Звичайний, Згорнутий, Збільшити):

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

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


Дякую за хорошу відповідь. Використовуючи цю інформацію, я, принаймні, можу вручну встановити деякі програми для запуску в певному місці, якщо хочу.
JosephStyons

Слід також зазначити, що SetWindowPlacement () повинен перевірити, чи справді існує це місце. Поширений сценарій - перевести ноутбук у сплячий режим, коли він під’єднаний до подвійних моніторів, а потім розбудити його лише одним, у такому випадку простору віртуального екрану значно менше.
JosephStyons

57

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

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 ще раз.


1
Дякую, це справді працює. Один коментар, який я хотів би додати, полягає в тому, що якщо додаток запускається програмою, наприклад, запускає IE, вам потрібно запустити iexplore і слідувати переліченому TryingToHelp. це працює. у моєму випадку у мене є запланована програма, яка запускає IE із заданою URL-адресою як параметром. зміна розміру та переміщення цього IE, запущеного планувальником завдань, не допомогло.
yantaq

На жаль, у мене на Win7 це не працює. Етапи 1-5 працюють, і якщо я не розгорнув, програма (TeXstudio) запускається на відповідному моніторі. Як тільки я розгорну, а потім закрию, наступний запуск відбудеться на іншому дисплеї.
Максим. К.

Я можу змусити це працювати для деяких програм, але в Windows 10 PowerShell завжди запускається на екрані мого ноутбука, ніколи на зовнішньому моніторі, на якому я хочу, щоб він запускався.
Nate

1
Дозвольте додати наступне зауваження: У моєму випадку, коли я двічі клацнув на файл .PDF, це не спрацювало. Потім я з’ясував, що має значення справді відкрити програму, а не двічі клацнути відповідний файл. У цьому випадку відкриття Adobe Acrobat через меню «Пуск», а потім виконання описаних кроків (тобто переміщення вікна до потрібного монітора, а потім його закриття) просто спрацювало нормально. Також переконайтесь, що вікно програми повністю поміщається на цільовому екрані і не перекривається з 2-м монітором, перш ніж його закрити.
Метт

1
Це не працює. ТРЕБА ДОДАТОК, щоб насправді зберегти свої налаштування та інше, і багато додатків неправильно розроблені. Дуже дратує ... але частина життя.
AbstractDissonance

11

Отримайте UltraMon. Швидко.

http://realtimesoft.com/ultramon/

Це не дозволяє вказати, на якому моніторі запускається програма, але вона дозволяє вам перенести програму на інший монітор і зберегти її співвідношення сторін у цілому одним клацанням миші. Це дуже зручна утиліта.

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


Я використовую UltraMon вдома і на роботі. Не знаю, як люди живуть без цього, насправді. Лол. Іноді при використанні розумної панелі завдань може бути трохи неприємно, але працює досить добре і досить часто, щоб я міг її дотримуватися. - Кевін Фейрчайлд
Кевін Ферчайлд,

Який липкий веб-сайт. Це 2009 люди! Але цікавий продукт. Дякую за посилання :)

У мене саме така ситуація - ноутбук на роботі оснащений подвійними моніторами, але лише трохи екрану ноутбука, коли мене немає. Вражає розчарування, коли програма завантажується в зоні, яка раніше була видимою - MS Outlook є одним з найбільших порушників. Я отримаю копію Ultramon, і, сподіваюся, це трохи полегшить життя. Дякую!
SqlRyan

Якщо буде згадано програмне забезпечення, у 2015 році DisplayFusion повинен бути у списку. У Prefs / Window Locatoin ви можете вказати, де повинні відкриватися певні програми. Мені подобається, що список заповнений на даний момент відкритими програмами, тому вам не доведеться шукати їх.
zx81,

Щоб перемістити програми, які потрапили в пастку на іншому екрані, використовуйте [win] + [стрілка], коли програма знаходиться у фокусі. Це перемістить програму з екрана на екран. Зупиніться, коли це з’явиться. Працює над Win 7+
Тім Шимандл

11

Це не зовсім відповідь на це питання, але я вирішив цю проблему за допомогою Shift + Win + [left,right] arrow keysярлика. За допомогою нього ви можете перемістити активне вікно на інший монітор.


Це працювало у мене, але без клавіші Shift, тобто Win + [ліворуч, праворуч] - допомогло мені при роботі з одним монітором та відкриттям програми на відсутньому!
Оглушений

Важлива примітка: Якщо ви використовуєте цей прийом, вікна не збережуть поточну позицію вікна. Для цього потрібно принаймні один раз перемістити / змінити розмір вікна за допомогою миші.
Тім Полман

4

Я впевнений, що основним монітором є за замовчуванням. Якщо програма була закодована гідно, коли вона закрита, вона запам'ятає, де вона була востаннє, і там знову відкриється, але - як ви помітили - це не поведінка за замовчуванням.

РЕДАГУВАТИ: Я зазвичай це роблю так, щоб розташування зберігалося в налаштуваннях програми. При завантаженні, якщо для них немає значення, воно за замовчуванням буде центром екрана. Після закриття форми він записує свою позицію. Таким чином, щоразу, коли він відкривається, це місце, де воно було останнім часом. Однак я не знаю простого способу сказати, щоб він автоматично запускався на другий монітор вперше.

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


3

Важливе зауваження: Якщо ви пам’ятаєте позицію програми та її вимкнення, а потім запускаєте її знову, майте на увазі, що конфігурація монітора користувача могла змінитися під час закриття програми.

Наприклад, користувачі ноутбуків часто змінюють конфігурацію дисплея. У док-станції може бути 2-й монітор, який зникає при роз’єднанні. Якщо користувач закриває програму, що працювала на 2-му моніторі, і повторно відкриває програму, коли монітор відключений, відновлення вікна до попередніх координат призведе до того, що це повністю поза екраном.

Щоб з’ясувати, наскільки великий дисплей насправді, перевірте GetSystemMetrics.


2

Тож у мене виникла ця проблема з Adobe Reader 9.0. Якось програма забула відкритись на моєму правому моніторі і постійно відкривалася на лівому моніторі. Більшість програм дозволяють перетягнути його, розгорнути екран, а потім закрити його, і він запам'ятає. Що ж, в Adobe мені довелося перетягнути його, а потім закрити, перш ніж розгорнути, щоб Windows запам'ятала, на якому екрані його слід відкрити наступного разу. Як тільки ви встановите його на правильний монітор, ви зможете його максимізувати. Я думаю, що це дурне, оскільки майже всі програми Windows запам'ятовують це автоматично, не намагаючись сформувати спосіб запам'ятати XP.


Насправді не відповів на запитання, але допоміг мені :)
DN

1

Тому я згоден, що є деякі програми, які ви можете налаштувати на відкриття на одному екрані, розгорнувши або клацнувши правою кнопкою миші та перемістивши / розміривши екран, а потім закрити та знову відкрити. Однак є й інші, які відкриватимуться лише на головному екрані.

Що я зробив, щоб вирішити: встановіть монітор, який ви віддаєте перевагу впертим програмам, щоб відкривати його, як монітор 1, а інший монітор - як 2, а потім змініть монітор 2 на основний - так будуть залишатися налаштування робочого столу та панель запуску. Сподіваюся, це допомагає.


0

Не тримайте мене на цьому, але я впевнений, що це залежить від самої програми. Я знаю, що багато хто завжди відкривається на головному моніторі, деякі знову відкриються на тому самому моніторі, на якому вони працювали раніше, а деякі ви можете встановити. Я знаю, наприклад, у мене є ярлики для відкриття командних вікон до певних каталогів, і кожен має у своїх властивостях можливість розташування, у якому можна відкрити вікно. Хоча Outlook просто запам'ятовує і відкривається на останньому екрані, в якому він був відкритий. Потім інші програми відкрити в тому вікні, в якому знаходиться поточний фокус.

Тому я не впевнений, що є спосіб сказати кожній програмі, де її слід відкрити. Сподіваюся, це допоможе деяким.


0

Я помітив, що якщо я ставлю ярлик на робочому столі на одному екрані, запущена програма може з’явитися на цьому екрані ( якщо ця програма не зміниться).

Це також стосується запуску речей з Провідника Windows - якщо Провідник знаходиться на одному екрані, запущена програма вибере той монітор для використання.

Знову ж таки, я думаю, що це коли програма, що запускає, визначає позицію за замовчуванням (керовану Windows). Здається, що більшість програм певним чином перекриває цю поведінку за замовчуванням.

Просте вікно, створене таким чином, зробить це:

hWnd = Створити вікно (windowClass, windowTitle, WS_VISIBLE | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, SW_SHOW, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL);


-3

Клацніть правою кнопкою миші ярлик і виберіть властивості. Переконайтеся, що ви перебуваєте на вкладці "Ярлик". Виберіть спадне вікно RUN та змініть його на Maximized.

Це може допомогти у запуску програми у повноекранному режимі на первинному моніторі.


3
Це насправді не відповідає на питання, і це старе питання.
Ajean
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.