1

Тема: AHK: изменения яркости системы (работа с контролами)

Задача: изменить яркость в системе
Реализация: я использую панель управления Nvidia

;увеличиваем паузу между изменениями контролов
setcontroldelay, 50

#2::
;запускаем панель управления
Run, C:\WINDOWS\system32\nvcplui.exe
;ждем его загрузки
WinWait, NVIDIA Control Panel
;делаем паузу, т.к. графическая часть еще не загрузилась
sleep, 300
;переходим на вкладку изменения яркости
controlclick, Static23, NVIDIA Control Panel

;тут необходимо вставить команду для передвижения ползунка

;Нажимаем "применить"
controlclick, Button9, NVIDIA Control Panel
;И закрываем окно
WinClose, NVIDIA Control Panel
return

Возникли некоторые трудности:
1. Есть команда для передвижения ползунка? Или придется переходить табом на ползунок и передвигать ползунок стрелкой?
2. Если открывать панель управления с параметром Hide, то окно не появляется, но все равно полноэкранные приложения сворачиваются, можно ли сделать так, что бы полноэкранные приложения не сворачивались?

2

Re: AHK: изменения яркости системы (работа с контролами)

OFF: а не проще ли использовать профили? Или Вам в одной и той же игре («полноэкранные приложения») приходится периодически менять одни и те же параметры туда-сюда?

3

Re: AHK: изменения яркости системы (работа с контролами)

2. Может, присвоить ихнему окну атрибут "поверх всех окон"?

WinSet, AlwaysOnTop, On, WinTitle

Убрать, соответственно, — Off.

4

Re: AHK: изменения яркости системы (работа с контролами)

alexii пишет:

OFF: а не проще ли использовать профили? Или Вам в одной и той же игре («полноэкранные приложения») приходится периодически менять одни и те же параметры туда-сюда?

Игра сама по себе темная, и приходится повышать яркость в системе. Один раз перед игрой.
Можно поподробнее о профилях. Их как-то можно менять в одно-два дейтсвия? или тоже придется манипулировать с окнами?

YMP пишет:

2. Может, присвоить ихнему окну атрибут "поверх всех окон"?

WinSet, AlwaysOnTop, On, WinTitle

Убрать, соответственно, — Off.

"ихнему" имеется ввиду полноэкранному приложению? (в моем случае игра)

5

Re: AHK: изменения яркости системы (работа с контролами)

Ну да, конечно, окну игры. Хотя это не то. Это ведь не мешает сворачивать окно, тот же Диспетчер задач, к примеру.

6

Re: AHK: изменения яркости системы (работа с контролами)

впринципе ничего страшного если будет сворачивать
лучше подскажите, как можно передвинуть ползунок кроме как send {right} ?

7

Re: AHK: изменения яркости системы (работа с контролами)

InFlames, сначала с помощью AU3_Spy.exe определи, как точно называется "ползунок".

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: изменения яркости системы (работа с контролами)

teadrinker пишет:

InFlames, сначала с помощью AU3_Spy.exe определи, как точно называется "ползунок".

ClassNN: msctls_trackbar324

9

Re: AHK: изменения яркости системы (работа с контролами)

Тогда пробуйте посылать ему сообщение TBM_SETPOS.

TBM_SETPOS = 0x405
NewPos = 20        ; Новая позиция.
SendMessage, TBM_SETPOS, 1, NewPos, msctls_trackbar324, WinTitle

10

Re: AHK: изменения яркости системы (работа с контролами)

Вряд ли так получится. Скорее всего, позиция сменится, а результата не будет.
Лучше так:

ControlSend, msctls_trackbar324, {Right 5}, WinTitle

Вместо {Right 5} подставить нужное. Вместо WinTitle — название окна.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: изменения яркости системы (работа с контролами)

Хе-хе, у меня сейчас версия панели управления NVidia:

Панель управления NVIDIA
Версия 1.5.2400.14
© 2002-2009 Корпорация NVIDIA. Все права защищены.

И того, что я искал, там попросту нет. В старой панели управления было — я сам настраивал однажды для просевшего монитора и игрушки, в которой не было регулировок яркости/контраста/гаммы. Увы.

В принципе, можно отслеживать активность приложения (или просто запускать приложение из скрипта) и манипулировать настройками либо из командной строки, либо вызовом функций DLL. Загружаем и читаем документацию. Например, яркость можно регулировать так:
* максимальная:

rundll32.exe NvCpl.dll,dtcfg setbrightness 1 all 125

* минимальная:

rundll32.exe NvCpl.dll,dtcfg setbrightness 1 all -125

* нормальная

rundll32.exe NvCpl.dll,dtcfg setbrightness 1 all 0

Контраст, соответственно, «setcontrast», от «-82» до «82».
Гамма, соответственно, «setgamma», от «0.5» до «6.0».
Сброс:

rundll32.exe NvCpl.dll,dtcfg setdefaults 1 color

«1» — номер монитора, «all» — все каналы.

У меня, правда, на FullScreenMode что-то не повлияло .

Во всяком случае, начиная с 22 страницы идут функции DLL, может сие будет удобнее.

P.S. Самое интересное, что, зарегистрировав соответствующую библиотеку, кой-чем можно манипулировать даже из VBScript/JScript.

12

Re: AHK: изменения яркости системы (работа с контролами)

teadrinker пишет:

Вряд ли так получится. Скорее всего, позиция сменится, а результата не будет.

Это типа нутром чуешь или можешь обосновать?

13 (изменено: teadrinker, 2009-07-27 20:04:23)

Re: AHK: изменения яркости системы (работа с контролами)

Если не получится, как советовал alexii, то, продолжая пост #10, можно поступить так. Сначала определим диапазон ползунка, если он неизвестен:

TBM_GETRANGEMIN = 1025
TBM_GETRANGEMAX = 1026
Sendmessage, TBM_GETRANGEMIN,,, msctls_trackbar324, WinTitle  ; сменить WinTitle на реальное название окна
min := ErrorLevel
Sendmessage, TBM_GETRANGEMAX,,, msctls_trackbar324, WinTitle  ; сменить WinTitle на реальное название окна
max := ErrorLevel 
MsgBox, min = %min%`nmax = %max%

Затем выберем нужную позицию RequiredPos в пределах этого диапазона.
Тогда следующий код установит ползунок в нужную позицию:

SetKeyDelay, -1
RequiredPos = 70   ; здесь указать позицию в пределах диапазона

; определяем текущую позицию
TBM_GETPOS = 1024
Sendmessage, TBM_GETPOS,,, msctls_trackbar324, WinTitle  ; сменить WinTitle на реальное название окна
pos := ErrorLevel

Shift := RequiredPos - pos
if Shift > 0
    ControlSend, msctls_trackbar324, {Right %Shift%}, WinTitle  ; сменить WinTitle на реальное название окна
Else
    {
        Shift := -Shift
        ControlSend, msctls_trackbar324, {Left %Shift%}, WinTitle  ; сменить WinTitle на реальное название окна
    }
Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14 (изменено: teadrinker, 2009-07-27 19:57:03)

Re: AHK: изменения яркости системы (работа с контролами)

YMP пишет:

Это типа нутром чуешь или можешь обосновать?

Я просто так уже попробовал!
Хотя, возможно, разные ползунки отреагируют по-разному.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15 (изменено: InFlames, 2009-07-27 20:00:35)

Re: AHK: изменения яркости системы (работа с контролами)

teadrinker пишет:

Вряд ли так получится. Скорее всего, позиция сменится, а результата не будет.
Лучше так:

ControlSend, msctls_trackbar324, {Right 5}, WinTitle

Вместо {Right 5} подставить нужное. Вместо WinTitle — название окна.

получилось, но можно как-то ускорить перемещение ползунка?

YMP пишет:

Тогда пробуйте посылать ему сообщение TBM_SETPOS.

TBM_SETPOS = 0x405
NewPos = 20        ; Новая позиция.
SendMessage, TBM_SETPOS, 1, NewPos, msctls_trackbar324, WinTitle

ползунок перемещается, но яркость не меняется



спасибо, остальную информацию переворю ночью

16

Re: AHK: изменения яркости системы (работа с контролами)

InFlames пишет:

получилось, но можно как-то ускорить перемещение ползунка?

А ты пост #13 внимательно прочитал?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: изменения яркости системы (работа с контролами)

teadrinker пишет:

Я просто так уже попробовал!

Ну так бы и написал, а то напустил туману, блин. Вообще-то по аналогии со скроллбаром, о котором я недавно читал, так и должно быть. Положение ползунка — это просто индикатор для пользователя.

18

Re: AHK: изменения яркости системы (работа с контролами)

YMP, возможно, в твоём варианте не хватает TRBN_THUMBPOSCHANGING, но оно уж как-то слишком сложно устроено, лень было разбираться.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: AHK: изменения яркости системы (работа с контролами)

А это не заметил?

Minimum operating systems Windows Vista

Да и кроме того она пересылается в составе WM_NOTIFY, а та:

For Windows 2000 and later systems, the WM_NOTIFY message cannot be sent between processes.

20

Re: AHK: изменения яркости системы (работа с контролами)

Да, точно. Ну, значит, кирдык.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21 (изменено: teadrinker, 2009-07-27 22:37:12)

Re: AHK: изменения яркости системы (работа с контролами)

Moжно покороче немного:

SetKeyDelay, -1
RequiredPos = 70   ; здесь указать позицию в пределах диапазона

; определяем текущую позицию
TBM_GETPOS = 1024
Sendmessage, TBM_GETPOS,,, msctls_trackbar324, WinTitle  ; сменить WinTitle на реальное название окна
pos := ErrorLevel

Shift := RequiredPos - pos
SendKey := Shift > 0 ? "{Right " Shift "}" : "{Left " (-Shift) "}"
ControlSend, msctls_trackbar324, % SendKey, WinTitle  ; сменить WinTitle на реальное название окна
Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

22 (изменено: InFlames, 2009-07-28 00:42:14)

Re: AHK: изменения яркости системы (работа с контролами)

teadrinker пишет:

Moжно покороче немного:

SetKeyDelay, -1
RequiredPos = 70   ; здесь указать позицию в пределах диапазона

; определяем текущую позицию
TBM_GETPOS = 1024
Sendmessage, TBM_GETPOS,,, msctls_trackbar324, WinTitle  ; сменить WinTitle на реальное название окна
pos := ErrorLevel

Shift := RequiredPos - pos
SendKey := Shift > 0 ? "{Right " Shift "}" : "{Left " (-Shift) "}"
ControlSend, msctls_trackbar324, % SendKey, WinTitle  ; сменить WinTitle на реальное название окна
Return

этот вариант рабочий

но все же этот самый оптимальный

rundll32.exe NvCpl.dll,dtcfg setgamma 1 all 125

Как сделать выполнение этой строки в ahk? В командной строке всё прекрасно работает. Может стоит записать эту строку в bat файл и сделать хоткей в ahk?


Добавлено:
все разобрался, просто надо экранировать запятую, тогда можно в ahk использовать run

Собственно итог

#4::
q:=!q
if q 
run rundll32.exe NvCpl.dll`,dtcfg setgamma 1 all 125
else
run rundll32.exe NvCpl.dll`,dtcfg setgamma 1 all 1
return

23 (изменено: InFlames, 2009-08-01 01:37:12)

Re: AHK: изменения яркости системы (работа с контролами)

Как сделать так, что бы можно было изменять яркость при появлении какого-либо окна?
Такой вариант не очень подходит, т.к. при его выполнении рядом со стрелкой появляются часы, система немного загружается, что не очень удобно.

settimer, gamma, 500

gamma:
IfWinNotExist WinTitle
run rundll32.exe NvCpl.dll`,dtcfg setgamma 1 all 1
else
run rundll32.exe NvCpl.dll`,dtcfg setgamma 1 all 125
return

Есть, ли такая функция, что бы можно было ожидать появления окна, и при этом работоспособной оставалась остальная часть скрипта?
Например, скрипт содержащий хоткеи, и другие функции

!r::
MyFunction
return

MyFunction:
Do Some Actions
return

WinWait MyWindow
Do Another Actions

Не остановится ли он на команде WinWait?

24

Re: AHK: изменения яркости системы (работа с контролами)

Наверное, не при появлении, а при активизации (вместо «SoundBeep» — требуемая команда изменения яркости, вместо «ahk_class Notepad» — характеристики требуемого окна):

Loop
{
    WinWaitActive, ahk_class Notepad
    IfWinActive, ahk_class Notepad
        SoundBeep, 880, 500
    WinWaitNotActive, ahk_class Notepad
    IfWinNotActive, ahk_class Notepad
        SoundBeep, 440, 500
}
InFlames пишет:

Не остановится ли он на команде WinWait?

Остановится, но назначенные горячие клавиши должны продолжать работать.

25

Re: AHK: изменения яркости системы (работа с контролами)

У меня в скрипте помимо хоткеев есть еще и функции для ПДУ. Попробовал запустить с Вашим вариантом, всё отлично работает и другим таймерам и функциям не мешает.
Только не пойму, зачем строки с IfWinActive и IfWinNotActive ? Если мы уже дождались активации окна, то зачем нам проверять активно ли оно?

26

Re: AHK: изменения яркости системы (работа с контролами)

Если у Вас работает и без них — вполне можно обойтись.

27

Re: AHK: изменения яркости системы (работа с контролами)

Версия панели Nvidia 2.8.254.08
Вот такой вариант уже не прокатывает. Система просто никак не реагирует на вызов этих функций.
Стоит Windows 7.
Может подскажете в чем дело?

28

Re: AHK: изменения яркости системы (работа с контролами)

А если запускать «rundll32.exe» с повышенными привилегиями?

29

Re: AHK: изменения яркости системы (работа с контролами)

UAC  отключен.
В свойства-совместимость уровень прав выбрать не могу, видимо из-за отключенного UAC.

30

Re: AHK: изменения яркости системы (работа с контролами)

Ясно.

31

Re: AHK: изменения яркости системы (работа с контролами)

В поисках решения проблемы на Windows 7 нашел такую страничку http://developer.nvidia.com/object/nvapi.html. На форуме разработчиков пишут, что работает на Win7. Я к сожалению не смог разобраться в этом. Может кто взглянет на это и пояснит, если сможет. Меня интересует как изменить яркость системы через драйвер нвидиа.

32

Re: AHK: изменения яркости системы (работа с контролами)

NvAPI_VIO_SetGamma?

hh.exe NVAPI_Reference_Developer_R256.chm::/group__vidio.html#gac2ef0e2baec1cc564f6735de3a1ba5a4

33

Re: AHK: изменения яркости системы (работа с контролами)

1. Скачал архив NVAPI_May2010 со страницы, на которую я дал ссылку. Куда это всё "пихать"?
2.

NVAPI_INTERFACE  NvAPI_VIO_SetGamma (NvVioHandle hVioHandle, NVVIOGAMMACORRECTION *pGamma)

Как вызвать эту функцию? Слово NVAPI_INTERFACE тоже часть функции или просто пояснение?

34

Re: AHK: изменения яркости системы (работа с контролами)

Там ещё есть PDF «NVIDIA Driver Settings. Programming Guide» (PG-5116-001_v01_public.pdf). Для начала попробуйте посмотреть и его.

35

Re: AHK: изменения яркости системы (работа с контролами)

Прочитал. К сожалению С++ (если не ошибаюсь) для меня темный лес. Даже эти примеры мне не помогли. Если кто-то может помочь, прошу помощи