Немного потыкался что-то никак и мало что понятно. Хочется просто вбить 1920x1080 и применить. У manhunter подсмотрел структуру на Fasm, оттуда и забрал. Непонятно как Device Name получить или что там хендл?
Использовать EnumDisplayDevices, которая возвращает в буфер структыры DISPLAY_DEVICE это самое DeviceName как строку не более 32 символов
Код (Text): ;--------------------------------------------- ; Monitor Add/Remove Demo ; Copyright (C) ManHunter / PCL ; http://www.manhunter.ru ;--------------------------------------------- format PE GUI 4.0 entry start include '%fasm%/win32a.inc' struct DISPLAY_DEVICE cb dd ? DeviceName rb 32 DeviceString rb 128 StateFlags dd ? DeviceID rb 128 DeviceKey rb 128 ends struct DEVMODE dmDeviceName rb 32 dmSpecVersion dw ? dmDriverVersion dw ? dmSize dw ? dmDriverExtra dw ? dmFields dd ? dmPosition POINT ? dmDisplayOrientation dd ? dmDisplayFixedOutput dd ? dmColor dw ? dmDuplex dw ? dmYResolution dw ? dmTTOption dw ? dmCollate dw ? dmFormName rb 32 dmLogPixels dw ? dmBitsPerPel dd ? dmPelsWidth dd ? dmPelsHeight dd ? dmDisplayFlags dd ? dmNup dd ? dmDisplayFrequency dd ? dmICMMethod dd ? dmICMIntent dd ? dmMediaType dd ? dmDitherType dd ? dmReserved1 dd ? dmReserved2 dd ? dmPanningWidth dd ? dmPanningHeight dd ? ends EDD_GET_DEVICE_INTERFACE_NAME = 1 ENUM_REGISTRY_SETTINGS = 0FFFFFFFEh CDS_UPDATEREGISTRY = 1 CDS_NORESET = 10000000h DM_PELSWIDTH = 1024;00080000h DM_PELSHEIGHT = 768;00100000h DM_POSITION = 00000020h ;--------------------------------------------- section '.data' data readable writeable dds DISPLAY_DEVICE dmode DEVMODE device dd ? section '.code' code readable executable start: ; Âòîðîé ìîíèòîð mov [device],0 ; Îòêëþ÷èòü ìîíèòîð ; mov [dds.cb],sizeof.DISPLAY_DEVICE ; invoke EnumDisplayDevices,NULL,[device],dds,\ ; EDD_GET_DEVICE_INTERFACE_NAME ; invoke RtlZeroMemory,dmode,sizeof.DEVMODE ; mov [dmode.dmSize],sizeof.DEVMODE ; mov [dmode.dmFields],DM_PELSHEIGHT+DM_PELSWIDTH+DM_POSITION ; invoke ChangeDisplaySettingsEx,dds.DeviceName,dmode,0,\ ; CDS_UPDATEREGISTRY+CDS_NORESET,NULL ; invoke ChangeDisplaySettingsEx,NULL,NULL,0,0,NULL ; Ïàóçà 10 ñåêóíä ; invoke Sleep,10000 ; Ïîäêëþ÷èòü ìîíèòîð mov [dds.cb],sizeof.DISPLAY_DEVICE invoke EnumDisplayDevices,NULL,[device],dds,\ EDD_GET_DEVICE_INTERFACE_NAME mov [dmode.dmSize],sizeof.DEVMODE invoke EnumDisplaySettings,dds.DeviceName,\ ENUM_REGISTRY_SETTINGS,dmode mov [dmode.dmFields],DM_PELSHEIGHT+DM_PELSWIDTH;+DM_POSITION invoke ChangeDisplaySettingsEx,dds.DeviceName,dmode,0,\ CDS_UPDATEREGISTRY,NULL;+CDS_NORESET,NULL invoke ChangeDisplaySettingsEx,NULL,NULL,0,0,NULL invoke ExitProcess,0 ;--------------------------------------------- section '.idata' import data readable writeable library kernel32,'kernel32.dll',\ user32,'user32.dll',\ user33,'user32.dll' include '%fasm%/api/kernel32.inc' include '%fasm%/api/user32.inc' ;import user33,\ ; EnumDisplayDevices,'EnumDisplayDevicesA' Чё-то дёргается (реагирует) но не изменяется. А зачем два раза подряд ChangeDisplaySettingsEx? --- Сообщение объединено, 16 дек 2024 в 15:48 --- О! Пошло дело! )) Я изначально вбивал Код (Text): mov [dmode.dmPelsWidth],1024 mov [dmode.dmPelsHeight],768 а вот [dmode.dmFields] мне не понятно было, в чём смысл этого параметра?
Афигеть, как просто Wallpaper поменять, впрочем это не нужно теперь. (Я хочу просто во время установки Windows ширину выставить) Код (Text): invoke SystemParametersInfo,SPI_SETDESKWALLPAPER,NULL,'C:\Windows\exec.png',SPIF_UPDATEINIFILE Но режим экрана обои сбрасывает, разумеется. --- Сообщение объединено, 16 дек 2024 в 16:24 --- А нельзя дисплей сломать? Я думаю Ширина x Высота это безопасно? Тем более стандарт практически.
Для этого у ChangeDisplaySettings/ChangeDisplaySettingsEx есть флаг CDS_TEST. Он позволяет узнать, что изменения вообще возможны