Как программно изменить яркость монитора через SendMessage? #574633


#0 by popcorn
Нужно изменить яркость монитора из скрипта. Скрипт не умеет рулить портами, поэтому можно испольтзовать только SendMessage или dllcall. Подскажите команду изменения яркости?
#1 by skunk
напиши програмку на дельфи  и вызывай из скрипта
#2 by mishaPH
табло что-ли делаешь?
#3 by popcorn
Без проблем! Какая функция на дельфи изменяет яркость? Ага.
#4 by skunk
#5 by HIDDEN MESSAGE
#6 by popcorn
Не софтовую гамму надо изменять, а реальную яркость подсветки. Как кнопками на мониторе, но только через DDC
#7 by Андрюха
Посмотри ChangeDisplaySettingsEx
#8 by popcorn
Не нашел там такого
#9 by Андрюха
LONG ChangeDisplaySettingsEx( LPCTSTR lpszDeviceName,   LPDEVMODE lpDevMode,     HWND hwnd,               DWORD dwflags,           LPVOID lParam); В случае, когда dwflags = CDS_VIDEOPARAMETERS, то lParam указывает на: dwOffset; dwCommand; dwFlags; dwMode; dwTVStandard; dwAvailableModes; dwAvailableTVStandard; dwFlickerFilter; dwOverScanX; dwOverScanY; dwMaxUnscaledX; dwMaxUnscaledY; dwPositionX; dwPositionY; dwBrightness; dwContrast; dwCPType; dwCPCommand; dwCPStandard; dwCPKey; bCP_APSTriggerBits; bOEMCopyProtection[256]; Т.е. в твоем случае представляют интерес dwBrightness и dwContrast.
#10 by 1Сергей
э... разве настройки моника можно делать с компьютера?
#11 by popcorn
Да
#12 by popcorn
Чото не получается прочитать эти lParam! Пустота одна считывается.
#13 by Torquader
Не каждый монитор поддерживает управление с компьютера, а если и поддерживает, то через подключение DVI, где карта выставляет параметры для монитора. Управление кнопками монитора предусмотрено только у тех мониторов, которые подключаются дополнительно USB-шнуром, но там им управляет специальная программа.
#14 by Midaw
нету функции в API, но есть функции в видеодрайверах, либо отдельных dll платных. в линухе есть бесплатная утилита, в том числе для командной строки
#15 by Midaw
беру свои слова обратно... + Структура настроек
#16 by Midaw
интересно, а умеет ли ChangeDisplaySettingsEx переключать входной разьем у монитора?
#17 by smaharbA
гамму можно
#18 by popcorn
смотри , было уже. Эта структура VIDEOPARAMETERS у меня не считывается. Точнее считывается какая-то пустота, не пойму что я делаю не так. Кто-нибудь пробовал?
#19 by Андрюха
Передаешь указатель?
#20 by popcorn
Передаю.
#21 by Андрюха
В смысле ТОЧНО УКАЗАТЕЛЬ?
#22 by popcorn
Абсолютно. LPDEVMODE считывается, а lParam не считывается. Может какую-то команду надо туда записать перед вызовом?
#23 by popcorn
CDS_VIDEOPARAMETERS := 0x00000020 VarSetCapacity(devmode,156,0), NumPut(156,devmode,36) DllCall( "EnumDisplaySettingsA", UInt,0, UInt,-1, UInt,&devmode ) MsgBox ErrorLevel = %ErrorLevel% DllCall( "ChangeDisplaySettingsExA", Str, "\.Display1", UInt,&devmode, UInt,hwnd, UInt,CDS_VIDEOPARAMETERS, UInt,&VIDEOPARAMETERS) типа того
#24 by popcorn
"&" перед переменной означает что это указатель Когда CDS_VIDEOPARAMETERS = 0, то записывается devmode, когда CDS_VIDEOPARAMETERS =  0x00000020, то devmode не влияет ни на что, но VIDEOPARAMETERS тоже не дают никакого эффекта, ни записываются, ни считываются. Думаю должна быть команда на считывание и на запись. Только не пойму какая
#25 by H A D G E H O G s
Откуда такая уверенность, что lParam должен на что то указывать? Это вы в нем должны указывать на созданную структуру с заполненными новыми параметрами.
#26 by H A D G E H O G s
Функция в Lparam ничего не возвращает
#27 by popcorn
Наверное. А как тогда прочитать текущие настройки которые нужно заполнить в Lparam чтобы не сбить то что не нужно менять?
#28 by Андрюха
Она и не должна туда ничего возвращать, она оттуда берет.
#29 by H A D G E H O G s
Ну ты посмотри, что автор писал. А ты этого не видел.
#30 by popcorn
Подскажи, dwBrightness - это какой по счету байт в структуре получается?
#31 by Андрюха
Да не извращайся ты с DllCall напиши приложение, которому параметрами в коммандной строке будешь передавать значения Яркости и Контраста или явно или +/- для увеличения/уменьшения текущего значения
#32 by Андрюха
например: dispset.exe 150 80 dispset.exe +10 +0
#33 by popcorn
У меня под рукой нет компиляторов, да и не хочется лишних файлов иметь, лучше чтобы всё в одном скрипте работало
#34 by H A D G E H O G s
Как получить ТЕКУЩЕЕ ЗНАЧЕНИЕ?
#35 by H A D G E H O G s
ChangeDisplaySettingsEx нашел GetDisplaySettingsEx - не нашел, может и есть в dll Есть еще EnumDisplaySettingsEx - но там не то. Надо посмотреть, какие еще функции экспортирует User32.dll
#36 by Андрюха
Где-то тут
#37 by Андрюха
Еще упоминают про DeviceIoControl с кодом IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS
#38 by popcorn
Эта хрень у меня не работает, пробовал. Говорят что она на ХР работала, но и то не всегда.
#39 by Андрюха
На Win7 пробуешь?
#40 by popcorn
да
#41 by popcorn
Оказывается возвращает ошибку DISP_CHANGE_BADPARAM. Подскажите смещение параметра dwBrightness в структуре. Или сколько байт занимает первая строка AGuid ?
#42 by popcorn
Оказывается AGuid - это нифига не строка длинной 38 байт, а просто 16 байт! Блин!
#43 by popcorn
Исправил, ошибку не выдает, но и результата никакого нет, яркость не меняется
#44 by H A D G E H O G s
Вот как то так :-)
#45 by H A D G E H O G s
Примитивно, без контроля ошибок.
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям
Back to top