Не давно начал перенос своего проекта на GMS с GM8.1 в результате понадобилась глубокая работа с дисплеем, получить список всех доступных разрешений для монитора, определение нескольких дисплеев, смена разрешений и частот обновления.
Делюсь своими результатами. Идея проста, раз уж GMS не предоставляет толковый инструментарий и команды для работы со всем выше перечисленным, пришлось делать всё самим, я и мой брочачо Corsar сделали DLL INTDisplayDT и INTDisplaySF которые делают всё то что было необходимо.
INTDisplayDT.dll - Занят вопросами разрешений, определения дисплеев и т.д
INTDisplaySF.dll - Работает на частоты.
Всё это тестировалось и было собственно ориентированно на GMS 1.4.9999 но предполагаю что на новые GM оно пойдёт спокойно ибо тут используются стандартный WinAPI. Не могу ничего сказать по поводу старых версий типа GM 8.x.
Писалось всё на C и компилировалось в MinGW x86 gcc с настройками компилятора:
gcc -shared -o ???.dll ???.c -Wl,--add-stdcall-alias
Где ??? название файла.
В архиве лежит тестовый GMX (Экспортированный .GMZ) - DisplayTemplate, DLL и их не скомпилированные варианты для тех кто хочет это изучить или перекомпилировать, решать вам.
в GMX я попытался всё структурировать и поставил кучу комментариев так что разобраться в работе будет не трудно
https://disk.yandex.ru/d/Zi0m8O4PJPIEYAФайл прикрепить не получилось так что вот Яндекс диск =/
UPD: Отловил и исправил один баг. Когда при включение Windows если не был подключён ни один монитор но в последствии его подключали, то он получал неправильный индекс и не учитывался в подсчете дисплеев.