1 (изменено: DJ_URAN, 2015-09-26 12:45:34)

Тема: AHK: Регулировка яркости экрана

Други, помогайте!
Имеется ноутбук с подключенной клавиатурой (bluetooth) на windows 10.
При помощи Autohotkey и nircmd создал скрипт регулировки яркости, но при регулировке не отображается GUI windows (ghb регулировке громкости, например, он есть. Ползунок отображается только при регулировке с родной ноутбучной клавиатуры. Прочитал про Nircmd, там пишут, что ползунка отображаться не должно.
Можно ли как-нибудь управлять яркостью через DLL драйвера видеокарты? (У меня ATI)
Нашел только способ для Nvidia http://forum.script-coding.com/viewtopic.php?pid=32381#p32381
Есть ли подобное описалово для ATI?
Спасибо всем за помощь!

2

Re: AHK: Регулировка яркости экрана

Протестируй


#NoEnv

c:= 0
Loop, 11
{
    SetBrightness((c++) * 10)
    Sleep 1000
}
ExitApp

SetBrightness(ByRef Level)
{
hLCD := DllCall("CreateFile"
    , Str, "\\.\LCD"
    , UInt, 0x80000000 | 0x40000000  ; GENERIC_READ | GENERIC_WRITE
    , UInt, 0x1 | 0x2  ; FILE_SHARE_READ | FILE_SHARE_WRITE
    , UInt, 0
    , UInt, 0x3  ; OPEN_EXISTING
    , UInt, 0, UInt, 0)
if hLCD <> -1
{
    FILE_DEVICE_VIDEO := 0x00000023, METHOD_BUFFERED := 0, FILE_ANY_ACCESS := 0
    VarSetCapacity(DISPLAY_BRIGHTNESS, 3, 0)
        NumPut(0x03, DISPLAY_BRIGHTNESS, 0, "UChar")    ; 0x01 = Set AC, 0x02 = Set DC, 0x03 = Set both
        NumPut(Level, DISPLAY_BRIGHTNESS, 1, "UChar")        ; The AC brightness level
        NumPut(Level, DISPLAY_BRIGHTNESS, 2, "UChar")        ; The DC brightness level
     DllCall("DeviceIoControl"
        , UInt, hLCD
        , UInt, (FILE_DEVICE_VIDEO<<16 | 0x127<<2 | METHOD_BUFFERED<<14 | FILE_ANY_ACCESS) ; IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS
        , UInt, &DISPLAY_BRIGHTNESS, UInt, 3
        , UInt, 0, UInt, 0
        , UIntP, dwBytesReturned  ; Unused.
        , UInt, 0)
    DllCall("CloseHandle", UInt, hLCD)
}
}

3 (изменено: DJ_URAN, 2015-09-26 21:24:42)

Re: AHK: Регулировка яркости экрана

Скрипт опробовал. Происходит ступенчатая регулировка яркости от минимума к максимуму. Индикатора нет. Ползункового.

4

Re: AHK: Регулировка яркости экрана

Так?

#NoEnv
Br:= 3 ; 0-10

f1::
if Br > 0
    Br--
ToolTip, % val:= Br*10 "%"
SetBrightness(val)
SetTimer, HideTool, -700
return

f2::
if br <10
    Br++
ToolTip, % val:= Br*10 "%"
SetBrightness(val)
SetTimer, HideTool, -700
return

HideTool:
ToolTip
return

;~ c:= 0
;~ Loop, 11
;~ {
    ;~ SetBrightness((c++) * 10)
    ;~ Sleep 1000
;~ }
;~ ExitApp

SetBrightness(ByRef Level)
{
hLCD := DllCall("CreateFile"
    , Str, "\\.\LCD"
    , UInt, 0x80000000 | 0x40000000  ; GENERIC_READ | GENERIC_WRITE
    , UInt, 0x1 | 0x2  ; FILE_SHARE_READ | FILE_SHARE_WRITE
    , UInt, 0
    , UInt, 0x3  ; OPEN_EXISTING
    , UInt, 0, UInt, 0)
if hLCD <> -1
{
    FILE_DEVICE_VIDEO := 0x00000023, METHOD_BUFFERED := 0, FILE_ANY_ACCESS := 0
    VarSetCapacity(DISPLAY_BRIGHTNESS, 3, 0)
        NumPut(0x03, DISPLAY_BRIGHTNESS, 0, "UChar")    ; 0x01 = Set AC, 0x02 = Set DC, 0x03 = Set both
        NumPut(Level, DISPLAY_BRIGHTNESS, 1, "UChar")        ; The AC brightness level
        NumPut(Level, DISPLAY_BRIGHTNESS, 2, "UChar")        ; The DC brightness level
     DllCall("DeviceIoControl"
        , UInt, hLCD
        , UInt, (FILE_DEVICE_VIDEO<<16 | 0x127<<2 | METHOD_BUFFERED<<14 | FILE_ANY_ACCESS) ; IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS
        , UInt, &DISPLAY_BRIGHTNESS, UInt, 3
        , UInt, 0, UInt, 0
        , UIntP, dwBytesReturned  ; Unused.
        , UInt, 0)
    DllCall("CloseHandle", UInt, hLCD)
}
}

5

Re: AHK: Регулировка яркости экрана

А так вообще ничего не происходит.
Я подумал, может, как-то можно использовать этот документ: https://msdn.microsoft.com/en-us/library/windows/hardware/dn613956%28v=vs.85%29.aspx

6 (изменено: Eduard, 2015-09-26 22:25:26)

Re: AHK: Регулировка яркости экрана

Бар™.

#NoEnv
Br:= 3 ; 0-10

f1::
if Br > 0
    Br--
ToolTip, % levelbar(Br)
SetBrightness(Br*10)
SetTimer, HideTool, -700
return

f2::
if br <10
    Br++
ToolTip, % levelbar(Br)
SetBrightness(Br*10)
SetTimer, HideTool, -700
return

levelbar(ByRef v){
    Loop, % v
        a.="☻"
    Loop, % 10 - v
        a.="☺"
    return "[" a "]"
}

HideTool:
ToolTip
return

;~ c:= 0
;~ Loop, 11
;~ {
    ;~ SetBrightness((c++) * 10)
    ;~ Sleep 1000
;~ }
;~ ExitApp

SetBrightness(ByRef Level)
{
hLCD := DllCall("CreateFile"
    , Str, "\\.\LCD"
    , UInt, 0x80000000 | 0x40000000  ; GENERIC_READ | GENERIC_WRITE
    , UInt, 0x1 | 0x2  ; FILE_SHARE_READ | FILE_SHARE_WRITE
    , UInt, 0
    , UInt, 0x3  ; OPEN_EXISTING
    , UInt, 0, UInt, 0)
if hLCD <> -1
{
    FILE_DEVICE_VIDEO := 0x00000023, METHOD_BUFFERED := 0, FILE_ANY_ACCESS := 0
    VarSetCapacity(DISPLAY_BRIGHTNESS, 3, 0)
        NumPut(0x03, DISPLAY_BRIGHTNESS, 0, "UChar")    ; 0x01 = Set AC, 0x02 = Set DC, 0x03 = Set both
        NumPut(Level, DISPLAY_BRIGHTNESS, 1, "UChar")        ; The AC brightness level
        NumPut(Level, DISPLAY_BRIGHTNESS, 2, "UChar")        ; The DC brightness level
     DllCall("DeviceIoControl"
        , UInt, hLCD
        , UInt, (FILE_DEVICE_VIDEO<<16 | 0x127<<2 | METHOD_BUFFERED<<14 | FILE_ANY_ACCESS) ; IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS
        , UInt, &DISPLAY_BRIGHTNESS, UInt, 3
        , UInt, 0, UInt, 0
        , UIntP, dwBytesReturned  ; Unused.
        , UInt, 0)
    DllCall("CloseHandle", UInt, hLCD)
}
}

7 (изменено: Eduard, 2015-09-26 22:31:22)

Re: AHK: Регулировка яркости экрана

DJ_URAN пишет:

А так вообще ничего не происходит.
Я подумал, может, как-то можно использовать этот документ: https://msdn.microsoft.com/en-us/library/windows/hardware/dn613956%28v=vs.85%29.aspx

Используй "F1", "F2".

8

Re: AHK: Регулировка яркости экрана

Последний скрипт выдает ошибку. Предыдущий опробовал с F1 и F2, яркость меняется. Бар выскакивает самопальный=)
Я когда говорил про статусбар, я имел в виду штатный бар от windows. При регулировке громкости он же появляется, и когда яркость регулирую родной ноутбучной клавой, тоже появляется статусбар с ползунком.
Их откуда выдрать?

9

Re: AHK: Регулировка яркости экрана

Почему статусбар родной виндовый появляется только при регулировке кнопками ноута?

10

Re: AHK: Регулировка яркости экрана

Потому что это делают дрова и программа входящая в комплект.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

11

Re: AHK: Регулировка яркости экрана

Слышал, можно как-то перехватить при помощи ahk скан коды с родной клавы на hid уровне. А можно ли наоборот, отправить команды со второй клавиатуры, эмулируя HID устройство?