Как получить текущее значение флага CDS_FULLSCREEN для монитора?
От: C0x  
Дата: 22.11.16 15:18
Оценка:
С помощью функции ChangeDisplaySettingsEx я могу установить CDS_FULLSCREEN через devmode структуру.
А как мне получить для данного монитора значение флага CDS_FULLSCREEN?

Основная задача определить, запущена ли сейчас игра на компьютере в Fullscreen mode или нет.
Re: Как получить текущее значение флага CDS_FULLSCREEN для монитора?
От: VTT http://vtt.to
Дата: 22.11.16 15:58
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>С помощью функции ChangeDisplaySettingsEx я могу установить CDS_FULLSCREEN через devmode структуру.

C0x>А как мне получить для данного монитора значение флага CDS_FULLSCREEN?

C0x>Основная задача определить, запущена ли сейчас игра на компьютере в Fullscreen mode или нет.


Мне кажется, что CDS_FULLSCREEN не имеет никакого отношения к тому, открыто что-то на весь экран или нет.
Чтобы определить, открыто ли какое-то окно на весь экран наверное стоит пройтись по всем окнам верхнего уровня, узнавать их габариты и сравнивать с разрешением экрана, на котором они открыты.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[2]: Как получить текущее значение флага CDS_FULLSCREEN для монитора?
От: C0x  
Дата: 22.11.16 17:52
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>Здравствуйте, C0x, Вы писали:


C0x>>С помощью функции ChangeDisplaySettingsEx я могу установить CDS_FULLSCREEN через devmode структуру.

C0x>>А как мне получить для данного монитора значение флага CDS_FULLSCREEN?

C0x>>Основная задача определить, запущена ли сейчас игра на компьютере в Fullscreen mode или нет.


VTT>Мне кажется, что CDS_FULLSCREEN не имеет никакого отношения к тому, открыто что-то на весь экран или нет.


Тогда зачем приложение вызывает ChangeDisplaySettingsEx перед тем как войти в fullscreen mode?
Отсюда я логично предположил, что для меня это будет знаком, что нечто сейчас вошло в полноэкранный режим.

VTT>Чтобы определить, открыто ли какое-то окно на весь экран наверное стоит пройтись по всем окнам верхнего уровня, узнавать их габариты и сравнивать с разрешением экрана, на котором они открыты.


Я так понимаю что переход в полноэкранный режим игры это не просто создание окна на весь экран монитора.
По моему есть разница например в запуске игры и развертывании Google Chrome во весь экран. Хотя могу ошибаться. В моем случае эти две ситуации нужно различать.
Re[3]: Как получить текущее значение флага CDS_FULLSCREEN для монитора?
От: VTT http://vtt.to
Дата: 22.11.16 21:06
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Здравствуйте, VTT, Вы писали:


VTT>>Здравствуйте, C0x, Вы писали:


C0x>>>С помощью функции ChangeDisplaySettingsEx я могу установить CDS_FULLSCREEN через devmode структуру.

C0x>>>А как мне получить для данного монитора значение флага CDS_FULLSCREEN?

C0x>>>Основная задача определить, запущена ли сейчас игра на компьютере в Fullscreen mode или нет.


VTT>>Мне кажется, что CDS_FULLSCREEN не имеет никакого отношения к тому, открыто что-то на весь экран или нет.


C0x>Тогда зачем приложение вызывает ChangeDisplaySettingsEx перед тем как войти в fullscreen mode?

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

VTT>>Чтобы определить, открыто ли какое-то окно на весь экран наверное стоит пройтись по всем окнам верхнего уровня, узнавать их габариты и сравнивать с разрешением экрана, на котором они открыты.


CDS_FULLSCREEN
The mode is temporary in nature.
If you change to and from another desktop, this mode will not be reset.

т.е. этот флаг указывается не для перехода в полноэкранный режим, а для индикации того, что параметры изменяются временно и потом будут возвращены обратно, что чаще всего происходит как раз у всяких полноэкранных приложений.
Короче с названием флажка они налажали.
По этому поводу Raymond Chen подробно писал.
Кроме того, я не думаю, что вызов ChangeDisplaySettingsEx еще используется при переходе в полноэкранный режим (во всяком случае, явно).
С появлением DXGI одного вызова IDXGIFactory::CreateSwapChain или IDXGISwapChain::SetFullscreenState стало достаточно.

C0x>Я так понимаю что переход в полноэкранный режим игры это не просто создание окна на весь экран монитора.

C0x>По моему есть разница например в запуске игры и развертывании Google Chrome во весь экран. Хотя могу ошибаться. В моем случае эти две ситуации нужно различать.

Наверное тут подразумевается просто полноэкранный режим, и "эксклюзивный" полноэкранный режим который существовал в XP и более старых системах.
Вроде как раньше все окна рисовалось в один общий экранный буффер и полноэкранное приложение могло приобрести эксклюзивный доступ к нему для максимальное производительности.
Но сейчас у каждого окна свой буффер и при переходе в полноэкранный режим он используется напрямую.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[3]: Как получить текущее значение флага CDS_FULLSCREEN для монитора?
От: CEMb  
Дата: 23.11.16 03:02
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Я так понимаю что переход в полноэкранный режим игры это не просто создание окна на весь экран монитора.

C0x>По моему есть разница например в запуске игры и развертывании Google Chrome во весь экран. Хотя могу ошибаться. В моем случае эти две ситуации нужно различать.

Посмотри SetDysplayMode/GetDysplayMode из DirectX
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.