|
Как программно изменить яркость монитора через SendMessage? | ☑ | ||
---|---|---|---|---|
0
popcorn
14.10.11
✎
06:16
|
Нужно изменить яркость монитора из скрипта. Скрипт не умеет рулить портами, поэтому можно испольтзовать только SendMessage или dllcall. Подскажите команду изменения яркости?
|
|||
1
skunk
14.10.11
✎
06:30
|
напиши програмку на дельфи и вызывай из скрипта
|
|||
2
mishaPH
14.10.11
✎
07:59
|
табло что-ли делаешь?
|
|||
3
popcorn
17.10.11
✎
06:31
|
(1) Без проблем! Какая функция на дельфи изменяет яркость?
(2) Ага. |
|||
4
skunk
17.10.11
✎
06:35
|
||||
5
skunk
17.10.11
✎
06:37
|
в этом пурги меньше
(****************************************************************************** A3D nGine 2003 a3d.intelligentdevelopment.sk [email protected] Open Source 3D Graphics Engine ****************************************************************************** * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * ******************************************************************************) unit A3D_GAMMA; interface uses math, windows; type TGammaRamp = packed record R, G, B: array[0..255] of Word; end; procedure A3D_StoreOriginalGamma(dc: HDC); procedure A3D_SetNewGamma(dc: HDC; val: single); procedure A3D_RestoreGamma(dc: HDC); var originalRamp, adjustedRamp: TGammaRamp; implementation procedure A3D_StoreOriginalGamma(dc: HDC); begin // Get the system's current gamma ramp, so we can restore later. FillChar(originalRamp, SizeOf(originalRamp), 0); GetDeviceGammaRamp(dc, originalRamp); adjustedRamp := originalRamp; end; procedure A3D_SetNewGamma(dc: HDC; val: single); var i, v : integer; begin for i := 0 to 255 do begin v := Round(255 * Power(i / 255, val)); if v > 255 then v := 255; // You can adjust each curve separately, but you usually shouldn't need to. adjustedRamp.R[i] := v shl 8; adjustedRamp.G[i] := v shl 8; adjustedRamp.B[i] := v shl 8; end; // Send the adjusted gamma ramp to the video card. SetDeviceGammaRamp(dc, adjustedRamp); end; procedure A3D_RestoreGamma(dc: HDC); begin SetDeviceGammaRamp(dc, originalRamp); end; end. |
|||
6
popcorn
17.10.11
✎
07:02
|
(4)(5) Не софтовую гамму надо изменять, а реальную яркость подсветки. Как кнопками на мониторе, но только через DDC
|
|||
7
Андрюха
17.10.11
✎
07:24
|
Посмотри ChangeDisplaySettingsEx
|
|||
8
popcorn
17.10.11
✎
07:54
|
(7) Не нашел там такого
|
|||
9
Андрюха
17.10.11
✎
08:09
|
(8) 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
1Сергей
17.10.11
✎
10:03
|
э... разве настройки моника можно делать с компьютера?
|
|||
11
popcorn
17.10.11
✎
10:05
|
(10) Да
|
|||
12
popcorn
17.10.11
✎
13:28
|
(9) Чото не получается прочитать эти lParam! Пустота одна считывается.
|
|||
13
Torquader
17.10.11
✎
14:58
|
Не каждый монитор поддерживает управление с компьютера, а если и поддерживает, то через подключение DVI, где карта выставляет параметры для монитора.
Управление кнопками монитора предусмотрено только у тех мониторов, которые подключаются дополнительно USB-шнуром, но там им управляет специальная программа. |
|||
14
Midaw
17.10.11
✎
15:02
|
(0) нету функции в API, но есть функции в видеодрайверах, либо отдельных dll платных. в линухе есть бесплатная утилита, в том числе для командной строки
|
|||
15
Midaw
17.10.11
✎
15:08
|
(14) беру свои слова обратно...
(9)+ http://msdn.microsoft.com/ru-ru/library/dd183413(v=vs.85).aspx Структура настроек http://msdn.microsoft.com/ru-ru/library/dd145196(v=vs.85).aspx |
|||
16
Midaw
17.10.11
✎
15:12
|
интересно, а умеет ли ChangeDisplaySettingsEx переключать входной разьем у монитора?
|
|||
17
smaharbA
17.10.11
✎
15:21
|
гамму можно
|
|||
18
popcorn
18.10.11
✎
06:01
|
(15) смотри (9), было уже.
Эта структура VIDEOPARAMETERS у меня не считывается. Точнее считывается какая-то пустота, не пойму что я делаю не так. Кто-нибудь пробовал? |
|||
19
Андрюха
18.10.11
✎
10:48
|
(18) Передаешь указатель?
|
|||
20
popcorn
18.10.11
✎
10:54
|
(19) Передаю.
|
|||
21
Андрюха
18.10.11
✎
10:54
|
В смысле ТОЧНО УКАЗАТЕЛЬ?
|
|||
22
popcorn
18.10.11
✎
10:56
|
(21) Абсолютно. LPDEVMODE считывается, а lParam не считывается. Может какую-то команду надо туда записать перед вызовом?
|
|||
23
popcorn
18.10.11
✎
10:58
|
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
popcorn
18.10.11
✎
11:01
|
"&" перед переменной означает что это указатель
Когда CDS_VIDEOPARAMETERS = 0, то записывается devmode, когда CDS_VIDEOPARAMETERS = 0x00000020, то devmode не влияет ни на что, но VIDEOPARAMETERS тоже не дают никакого эффекта, ни записываются, ни считываются. Думаю должна быть команда на считывание и на запись. Только не пойму какая |
|||
25
H A D G E H O G s
18.10.11
✎
11:03
|
Откуда такая уверенность, что lParam должен на что то указывать?
Это вы в нем должны указывать на созданную структуру с заполненными новыми параметрами. |
|||
26
H A D G E H O G s
18.10.11
✎
11:03
|
Функция в Lparam ничего не возвращает
|
|||
27
popcorn
18.10.11
✎
11:05
|
(26) Наверное. А как тогда прочитать текущие настройки которые нужно заполнить в Lparam чтобы не сбить то что не нужно менять?
|
|||
28
Андрюха
18.10.11
✎
11:16
|
(26) Она и не должна туда ничего возвращать, она оттуда берет.
type
|
|||
29
H A D G E H O G s
18.10.11
✎
11:18
|
(28) Ну ты посмотри, что автор писал. А ты этого не видел.
|
|||
30
popcorn
18.10.11
✎
11:19
|
Подскажи, dwBrightness - это какой по счету байт в структуре получается?
|
|||
31
Андрюха
18.10.11
✎
11:22
|
Да не извращайся ты с DllCall напиши приложение, которому параметрами в коммандной строке будешь передавать значения Яркости и Контраста или явно или +/- для увеличения/уменьшения текущего значения
|
|||
32
Андрюха
18.10.11
✎
11:24
|
например:
dispset.exe 150 80 dispset.exe +10 +0 |
|||
33
popcorn
18.10.11
✎
11:27
|
(32) У меня под рукой нет компиляторов, да и не хочется лишних файлов иметь, лучше чтобы всё в одном скрипте работало
|
|||
34
H A D G E H O G s
18.10.11
✎
11:28
|
(31) Как получить ТЕКУЩЕЕ ЗНАЧЕНИЕ?
|
|||
35
H A D G E H O G s
18.10.11
✎
11:30
|
ChangeDisplaySettingsEx() нашел
GetDisplaySettingsEx() - не нашел, может и есть в dll Есть еще EnumDisplaySettingsEx() - но там не то. Надо посмотреть, какие еще функции экспортирует User32.dll |
|||
36
Андрюха
18.10.11
✎
11:31
|
||||
37
Андрюха
18.10.11
✎
11:42
|
Еще упоминают про DeviceIoControl с кодом IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS
|
|||
38
popcorn
18.10.11
✎
11:43
|
(37) Эта хрень у меня не работает, пробовал. Говорят что она на ХР работала, но и то не всегда.
|
|||
39
Андрюха
18.10.11
✎
11:47
|
(38) На Win7 пробуешь?
|
|||
40
popcorn
18.10.11
✎
12:38
|
(39) да
|
|||
41
popcorn
18.10.11
✎
13:04
|
Оказывается возвращает ошибку DISP_CHANGE_BADPARAM. Подскажите смещение параметра dwBrightness в структуре. Или сколько байт занимает первая строка AGuid ?
|
|||
42
popcorn
19.10.11
✎
06:59
|
Оказывается AGuid - это нифига не строка длинной 38 байт, а просто 16 байт! Блин!
|
|||
43
popcorn
19.10.11
✎
07:16
|
Исправил, ошибку не выдает, но и результата никакого нет, яркость не меняется
|
|||
44
H A D G E H O G s
19.10.11
✎
11:26
|
Вот как то так :-)
http://zalil.ru/31894367 |
|||
45
H A D G E H O G s
19.10.11
✎
11:26
|
Примитивно, без контроля ошибок.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |