От новичка до гуру: Курсы программирования на CyberDuff

Сохранить/восстановить окно на втором мониторе (экране), когда дисплей отключен (например, крышка ноутбука закрыта)?

У меня есть приложение Winform, которое получает параметр командной строки, указывающий, будет ли он отображаться на основном мониторе второго монитора через разъем I-Omega USB Dual Monitor.

Приложение работает на ноутбуке и использует два монитора. 1. Первый монитор просто подключается к порту VGA ноутбука. Запускаю "MyApplication.exe 1" 2. Второй монитор подключен через USB двойной монитор VGA порт. Я запускаю второй экземпляр "MyApplication.exe 2"

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

Мой вопрос: есть ли событие открытия монитора в .NET? Или есть другие настройки для сохранения второго экземпляра на втором мониторе/экране?

Я знаю, что есть событие WM_POWERBROADCAST, но я уже отключил ноутбук от спящего режима.


  • Не уверен насчет события открытия/закрытия монитора, но вы можете попробовать расположить свои формы в обработчике событий, активированных формой. 13.12.2011
  • Посмотрите на класс SystemEvents. Угадывание событий DisplaySettingsChanged или UserPreferenceChanged. 13.12.2011

Ответы:


1

Я смог сделать это не по событию Windows, а по таймеру. В основном таймер будет проверять местоположение окна с нужным экраном. Если он не соответствует нужному экрану, я бы снова отрегулировал местоположение, чтобы перейти к нужному монитору. Я добавил допуск 4 (WinXP) ~ 8 (Win7) пикселей при проверке, равно ли верхнее левое расположение. Верхнее и левое расположение становится (-4,-4) в развернутом состоянии. В свернутом состоянии я не проверяю местоположение.

Я использовал метод ShowOnMonitor из предыдущего вопроса: Как обеспечить отображение формы на дополнительном мониторе в сценарии с двумя мониторами?

private void autoAdjustPositionTimer_Tick(object sender, EventArgs e) {

    if (WindowState == FormWindowState.Minimized)
    {
        return;
    }

    autoAdjustPositionTimer.Stop();
    try
    {
        Screen[] sc;
        sc = Screen.AllScreens;

        int showOnMonitor = ExpectedMonitorIndex; // i.e. 1
        if (showOnMonitor >= sc.Length)
        {
            showOnMonitor = 0;
        }

        int offsetTolerance = 8;

        // Check the top left position only
        int xDiff = Math.Abs(Location.X - sc[showOnMonitor].Bounds.Left);
        int yDiff = Math.Abs(Location.Y - sc[showOnMonitor].Bounds.Top);
        if (xDiff > offsetTolerance || yDiff > offsetTolerance){
            // Method to move the position
            ShowOnMonitor(showOnMonitor);
        }
    }
    finally
    {
        autoAdjustPositionTimer.Start();
    }
}
14.12.2011
Новые материалы

Представляем Narwhal Technologies (Nrwl)
6 декабря 2016 г. Маунтин-Вью, Калифорния С тех пор, как Виктор Савкин и я (Джефф Кросс) присоединились к команде Angular в Google на заре Angular 1, Angular продемонстрировал феноменальный..

Путь AWS  — «Изучение машинного обучения — 10 начинающих ИИ и машинного обучения на AWS».
Универсальный ресурсный центр для изучения искусственного интеллекта и машинного обучения. НОЛЬ или ГЕРОЙ, начните свое путешествие здесь. Получите решения и пройдите обучение у экспертов AWS...

5 простых концепций Python, ставших сложными
#заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

«Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

Отслеживание состояния с течением времени с дифференцированием снимков
Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..