Зміна рівня збільшення яскравості Windows 10


3

Я на Windows 10 на Lenovo ThinkPad вуглецю x1 з Intel (R) HD Graphics. Коли я натискаю клавішу Fn + Brightness, збільшення / зменшення яскравості на 10. Я хочу змінити це значення збільшення.

Відповіді:


1

Я використовував nircmd для зміни яскравості, як зазначено в цьому відповідь .

Але я не впевнений, чому я не можу використовувати cmdshortcutkey команда в nircmd.

Знайшли краще розчин

  1. Завантажте та встановіть AutoHotKey
  2. Створіть файл сценарію AutoHotKey
  3. Збережіть це сценарій , видаліть .txt в BrightnessSetter.ahk.txt

class BrightnessSetter {
    ; qwerty12 - 27/05/17
    ; https://github.com/qwerty12/AutoHotkeyScripts/tree/master/LaptopBrightnessSetter
    static _WM_POWERBROADCAST := 0x218, _osdHwnd := 0, hPowrprofMod := DllCall("LoadLibrary", "Str", "powrprof.dll", "Ptr") 

    __New() {
        if (BrightnessSetter.IsOnAc(AC))
            this._AC := AC
        if ((this.pwrAcNotifyHandle := DllCall("RegisterPowerSettingNotification", "Ptr", A_ScriptHwnd, "Ptr", BrightnessSetter._GUID_ACDC_POWER_SOURCE(), "UInt", DEVICE_NOTIFY_WINDOW_HANDLE := 0x00000000, "Ptr"))) ; Sadly the callback passed to *PowerSettingRegister*Notification runs on a new threadl
            OnMessage(this._WM_POWERBROADCAST, ((this.pwrBroadcastFunc := ObjBindMethod(this, "_On_WM_POWERBROADCAST"))))
    }

    __Delete() {
        if (this.pwrAcNotifyHandle) {
            OnMessage(BrightnessSetter._WM_POWERBROADCAST, this.pwrBroadcastFunc, 0)
            ,DllCall("UnregisterPowerSettingNotification", "Ptr", this.pwrAcNotifyHandle)
            ,this.pwrAcNotifyHandle := 0
            ,this.pwrBroadcastFunc := ""
        }
    }

    SetBrightness(increment, jump := False, showOSD := True, autoDcOrAc := -1, ptrAnotherScheme := 0)
    {
        static PowerGetActiveScheme := DllCall("GetProcAddress", "Ptr", BrightnessSetter.hPowrprofMod, "AStr", "PowerGetActiveScheme", "Ptr")
              ,PowerSetActiveScheme := DllCall("GetProcAddress", "Ptr", BrightnessSetter.hPowrprofMod, "AStr", "PowerSetActiveScheme", "Ptr")
              ,PowerWriteACValueIndex := DllCall("GetProcAddress", "Ptr", BrightnessSetter.hPowrprofMod, "AStr", "PowerWriteACValueIndex", "Ptr")
              ,PowerWriteDCValueIndex := DllCall("GetProcAddress", "Ptr", BrightnessSetter.hPowrprofMod, "AStr", "PowerWriteDCValueIndex", "Ptr")
              ,PowerApplySettingChanges := DllCall("GetProcAddress", "Ptr", BrightnessSetter.hPowrprofMod, "AStr", "PowerApplySettingChanges", "Ptr")

        if (increment == 0 && !jump) {
            if (showOSD)
                BrightnessSetter._ShowBrightnessOSD()
            return
        }

        if (!ptrAnotherScheme ? DllCall(PowerGetActiveScheme, "Ptr", 0, "Ptr*", currSchemeGuid, "UInt") == 0 : DllCall("powrprof\PowerDuplicateScheme", "Ptr", 0, "Ptr", ptrAnotherScheme, "Ptr*", currSchemeGuid, "UInt") == 0) {
            if (autoDcOrAc == -1) {
                if (this != BrightnessSetter) {
                    AC := this._AC
                } else {
                    if (!BrightnessSetter.IsOnAc(AC)) {
                        DllCall("LocalFree", "Ptr", currSchemeGuid, "Ptr")
                        return
                    }
                }
            } else {
                AC := !!autoDcOrAc
            }

            currBrightness := 0
            if (jump || BrightnessSetter._GetCurrentBrightness(currSchemeGuid, AC, currBrightness)) {
                 maxBrightness := BrightnessSetter.GetMaxBrightness()
                ,minBrightness := BrightnessSetter.GetMinBrightness()

                if (jump || !((currBrightness == maxBrightness && increment > 0) || (currBrightness == minBrightness && increment < minBrightness))) {
                    if (currBrightness + increment > maxBrightness)
                        increment := maxBrightness
                    else if (currBrightness + increment < minBrightness)
                        increment := minBrightness
                    else
                        increment += currBrightness

                    if (DllCall(AC ? PowerWriteACValueIndex : PowerWriteDCValueIndex, "Ptr", 0, "Ptr", currSchemeGuid, "Ptr", BrightnessSetter._GUID_VIDEO_SUBGROUP(), "Ptr", BrightnessSetter._GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS(), "UInt", increment, "UInt") == 0) {
                        ; PowerApplySettingChanges is undocumented and exists only in Windows 8+. Since both the Power control panel and the brightness slider use this, we'll do the same, but fallback to PowerSetActiveScheme if on Windows 7 or something
                        if (!PowerApplySettingChanges || DllCall(PowerApplySettingChanges, "Ptr", BrightnessSetter._GUID_VIDEO_SUBGROUP(), "Ptr", BrightnessSetter._GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS(), "UInt") != 0)
                            DllCall(PowerSetActiveScheme, "Ptr", 0, "Ptr", currSchemeGuid, "UInt")
                    }
                }

                if (showOSD)
                    BrightnessSetter._ShowBrightnessOSD()
            }
            DllCall("LocalFree", "Ptr", currSchemeGuid, "Ptr")
        }
    }

    IsOnAc(ByRef acStatus)
    {
        static SystemPowerStatus
        if (!VarSetCapacity(SystemPowerStatus))
            VarSetCapacity(SystemPowerStatus, 12)

        if (DllCall("GetSystemPowerStatus", "Ptr", &SystemPowerStatus)) {
            acStatus := NumGet(SystemPowerStatus, 0, "UChar") == 1
            return True
        }

        return False
    }

    GetDefaultBrightnessIncrement()
    {
        static ret := 10
        DllCall("powrprof\PowerReadValueIncrement", "Ptr", BrightnessSetter._GUID_VIDEO_SUBGROUP(), "Ptr", BrightnessSetter._GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS(), "UInt*", ret, "UInt")
        return ret
    }

    GetMinBrightness()
    {
        static ret := -1
        if (ret == -1)
            if (DllCall("powrprof\PowerReadValueMin", "Ptr", BrightnessSetter._GUID_VIDEO_SUBGROUP(), "Ptr", BrightnessSetter._GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS(), "UInt*", ret, "UInt"))
                ret := 0
        return ret
    }

    GetMaxBrightness()
    {
        static ret := -1
        if (ret == -1)
            if (DllCall("powrprof\PowerReadValueMax", "Ptr", BrightnessSetter._GUID_VIDEO_SUBGROUP(), "Ptr", BrightnessSetter._GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS(), "UInt*", ret, "UInt"))
                ret := 100
        return ret
    }

    _GetCurrentBrightness(schemeGuid, AC, ByRef currBrightness)
    {
        static PowerReadACValueIndex := DllCall("GetProcAddress", "Ptr", BrightnessSetter.hPowrprofMod, "AStr", "PowerReadACValueIndex", "Ptr")
              ,PowerReadDCValueIndex := DllCall("GetProcAddress", "Ptr", BrightnessSetter.hPowrprofMod, "AStr", "PowerReadDCValueIndex", "Ptr")
        return DllCall(AC ? PowerReadACValueIndex : PowerReadDCValueIndex, "Ptr", 0, "Ptr", schemeGuid, "Ptr", BrightnessSetter._GUID_VIDEO_SUBGROUP(), "Ptr", BrightnessSetter._GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS(), "UInt*", currBrightness, "UInt") == 0
    }

    _ShowBrightnessOSD()
    {
        static PostMessagePtr := DllCall("GetProcAddress", "Ptr", DllCall("GetModuleHandle", "Str", "user32.dll", "Ptr"), "AStr", A_IsUnicode ? "PostMessageW" : "PostMessageA", "Ptr")
              ,WM_SHELLHOOK := DllCall("RegisterWindowMessage", "Str", "SHELLHOOK", "UInt")
        if A_OSVersion in WIN_VISTA,WIN_7
            return
        BrightnessSetter._RealiseOSDWindowIfNeeded()
        ; Thanks to YashMaster @ https://github.com/YashMaster/Tweaky/blob/master/Tweaky/BrightnessHandler.h for realising this could be done:
        if (BrightnessSetter._osdHwnd)
            DllCall(PostMessagePtr, "Ptr", BrightnessSetter._osdHwnd, "UInt", WM_SHELLHOOK, "Ptr", 0x37, "Ptr", 0)
    }

    _RealiseOSDWindowIfNeeded()
    {
        static IsWindow := DllCall("GetProcAddress", "Ptr", DllCall("GetModuleHandle", "Str", "user32.dll", "Ptr"), "AStr", "IsWindow", "Ptr")
        if (!DllCall(IsWindow, "Ptr", BrightnessSetter._osdHwnd) && !BrightnessSetter._FindAndSetOSDWindow()) {
            BrightnessSetter._osdHwnd := 0
            try if ((shellProvider := ComObjCreate("{C2F03A33-21F5-47FA-B4BB-156362A2F239}", "{00000000-0000-0000-C000-000000000046}"))) {
                try if ((flyoutDisp := ComObjQuery(shellProvider, "{41f9d2fb-7834-4ab6-8b1b-73e74064b465}", "{41f9d2fb-7834-4ab6-8b1b-73e74064b465}"))) {
                     DllCall(NumGet(NumGet(flyoutDisp+0)+3*A_PtrSize), "Ptr", flyoutDisp, "Int", 0, "UInt", 0)
                    ,ObjRelease(flyoutDisp)
                }
                ObjRelease(shellProvider)
                if (BrightnessSetter._FindAndSetOSDWindow())
                    return
            }
            ; who knows if the SID & IID above will work for future versions of Windows 10 (or Windows 8). Fall back to this if needs must
            Loop 2 {
                SendEvent {Volume_Mute 2}
                if (BrightnessSetter._FindAndSetOSDWindow())
                    return
                Sleep 100
            }
        }
    }

    _FindAndSetOSDWindow()
    {
        static FindWindow := DllCall("GetProcAddress", "Ptr", DllCall("GetModuleHandle", "Str", "user32.dll", "Ptr"), "AStr", A_IsUnicode ? "FindWindowW" : "FindWindowA", "Ptr")
        return !!((BrightnessSetter._osdHwnd := DllCall(FindWindow, "Str", "NativeHWNDHost", "Str", "", "Ptr")))
    }

    _On_WM_POWERBROADCAST(wParam, lParam)
    {
        ;OutputDebug % &this
        if (wParam == 0x8013 && lParam && NumGet(lParam+0, 0, "UInt") == NumGet(BrightnessSetter._GUID_ACDC_POWER_SOURCE()+0, 0, "UInt")) { ; PBT_POWERSETTINGCHANGE and a lazy comparison
            this._AC := NumGet(lParam+0, 20, "UChar") == 0
            return True
        }
    }

    _GUID_VIDEO_SUBGROUP()
    {
        static GUID_VIDEO_SUBGROUP__
        if (!VarSetCapacity(GUID_VIDEO_SUBGROUP__)) {
             VarSetCapacity(GUID_VIDEO_SUBGROUP__, 16)
            ,NumPut(0x7516B95F, GUID_VIDEO_SUBGROUP__, 0, "UInt"), NumPut(0x4464F776, GUID_VIDEO_SUBGROUP__, 4, "UInt")
            ,NumPut(0x1606538C, GUID_VIDEO_SUBGROUP__, 8, "UInt"), NumPut(0x99CC407F, GUID_VIDEO_SUBGROUP__, 12, "UInt")
        }
        return &GUID_VIDEO_SUBGROUP__
    }

    _GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS()
    {
        static GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__
        if (!VarSetCapacity(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__)) {
             VarSetCapacity(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 16)
            ,NumPut(0xADED5E82, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 0, "UInt"), NumPut(0x4619B909, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 4, "UInt")
            ,NumPut(0xD7F54999, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 8, "UInt"), NumPut(0xCB0BAC1D, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 12, "UInt")
        }
        return &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__
    }

    _GUID_ACDC_POWER_SOURCE()
    {
        static GUID_ACDC_POWER_SOURCE_
        if (!VarSetCapacity(GUID_ACDC_POWER_SOURCE_)) {
             VarSetCapacity(GUID_ACDC_POWER_SOURCE_, 16)
            ,NumPut(0x5D3E9A59, GUID_ACDC_POWER_SOURCE_, 0, "UInt"), NumPut(0x4B00E9D5, GUID_ACDC_POWER_SOURCE_, 4, "UInt")
            ,NumPut(0x34FFBDA6, GUID_ACDC_POWER_SOURCE_, 8, "UInt"), NumPut(0x486551FF, GUID_ACDC_POWER_SOURCE_, 12, "UInt")
        }
        return &GUID_ACDC_POWER_SOURCE_
    }

}

BrightnessSetter_new() {
    return new BrightnessSetter()
}
  1. Заповніть наступний код і додайте нижче сценарій

BS := new BrightnessSetter()

<increment hotkey>::BS.SetBrightness(<increment value>)
<decrement hotkey>::BS.SetBrightness(<decrement value>)

Приклад:


BS := new BrightnessSetter()

!Right::BS.SetBrightness(1)
!Left::BS.SetBrightness(-1)

!Right засоби Alt + Right arrow key

!Left засоби Alt + Left arrow key

Прочитайте документацію AutoHotKey, щоб налаштувати себе.

  1. Нарешті, ви можете створити ярлик для сценарію і помістити його в папку запуску Windows.

Щоб відкрити папку , натисніть Windows+R, введіть shell:startup, натисніть Enter.


0

Я використовую 3RVX, щоб змінити свій обсяг на 1% на вікнах 10. Я б не здивувався, якщо їх було опція яскравості, а також.


1
Йдеться про зміну яскравості не гучності. Якщо ви не впевнені, що програмне забезпечення, яке ви згадували, не може змінити яскравість, то це не допоможе операційній системі. Відредагуйте свою відповідь більш певною інформацією.
alljamin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.