Mẹo tùy biến mức độ điều chỉnh ánh sáng của Windows 10, bấm phát max ánh sáng luôn cũng được

Mẹo tùy biến mức độ điều chỉnh ánh sáng của Windows 10, bấm phát max ánh sáng luôn cũng được

Laptop Lenovo Ideapad Slim 5 14IMH9 83DA001YVN

Laptop Lenovo IdeaPad Slim 5 14IMH9 83DA001YVN

26.990.000₫
24.490.000₫ -9%
0.0 (0 đánh giá)
Vừa mở bán
 Laptop Acer Aspire 3 A315 58 54M5

Laptop Acer Aspire 3 A315 58 54M5

12.490.000₫
8.490.000₫ -32%
0.0 (0 đánh giá)
Vừa mở bán
 Laptop gaming Lenovo LOQ 15IAX9 83GS001RVN

Laptop gaming Lenovo LOQ 15IAX9 83GS001RVN

22.490.000₫
19.990.000₫ -11%
0.0 (0 đánh giá)
Đã bán: 3
 Laptop gaming Lenovo LOQ 15IAX9 83GS001SVN

Laptop gaming Lenovo LOQ 15IAX9 83GS001SVN

20.490.000₫
16.990.000₫ -17%
0.0 (0 đánh giá)
Đã bán: 3
 Laptop Acer Swift X SFX16 51G 50GS

Laptop Acer Swift X SFX16 51G 50GS

30.990.000₫
15.990.000₫ -48%
0.0 (0 đánh giá)
Vừa mở bán
 Laptop Avita PURA A+ AF14A3VNF56F Black

Laptop Avita PURA A+ AF14A3VNF56F Black

12.950.000₫
6.990.000₫ -46%
0.0 (0 đánh giá)
Vừa mở bán
 Laptop Lenovo V14 G4 IRU 83A0000TVN

Laptop Lenovo V14 G4 IRU 83A0000TVN

11.990.000₫
10.490.000₫ -13%
0.0 (0 đánh giá)
Đã bán: 1
 Laptop gaming Acer Predator Triton 500 SE PT516 52S 75E3

Laptop gaming Acer Predator Triton 500 SE PT516 52S 75E3

69.990.000₫
30.990.000₫ -56%
0.0 (0 đánh giá)
Vừa mở bán
 Laptop gaming Acer Nitro 5 AN515 46 R6QR

Laptop gaming Acer Nitro 5 AN515 46 R6QR

20.990.000₫
0.0 (0 đánh giá)
Vừa mở bán
 Laptop gaming Lenovo LOQ 15ARP9 83JC003YVN

Laptop gaming Lenovo LOQ 15ARP9 83JC003YVN

31.490.000₫
26.990.000₫ -14%
0.0 (0 đánh giá)
Vừa mở bán
 Laptop Acer Swift X SFX16 51G 516Q

Laptop Acer Swift X SFX16 51G 516Q

29.990.000₫
14.490.000₫ -52%
0.0 (0 đánh giá)
Vừa mở bán
Mục lục

Khi bạn bấm các phím tăng giảm độ sáng trên laptop, Windows 10 chỉ tăng hoặc giảm độ sáng trên một đơn vị nhất định nào đó. Ví dụ như mỗi lần bấm sẽ tặng/giảm đi 3 đơn vị độ sáng chẳng hạn, và bạn sẽ không thể nào can thiệp hay tùy chỉnh được mức độ tăng giảm này. 

Thật ra đây cũng không phải là vấn đề gì quá lớn, nhưng nếu bạn cảm thấy bất tiện vì mỗi lần muốn tăng hoặc giảm độ sáng màn hình để phù hợp với môi trường xung quanh, bạn sẽ phải nhấn phím nhiều lần để canh mức ánh sáng phụ hợp. Trong bài viết này mình sẽ hướng dẫn các bạn cách tùy biến mức tăng giảm độ sáng màn hình sao cho phù hợp với nhu cầu của bạn chỉ bằng một đến 2 phím bấm.

Bước 1: Đầu tiên, bạn cần tải ứng dụng miễn phí AutoHotkey tại đây. Sau đó chọn Download AutoHotkey installer để tải về.

Bước 2: Sau khi tải về, mở file AutoHotkey_1.1.32.00_setup.exe để tiến hành cài đặt.

Bước 3: Sau khi cài đặt xong, bạn click chuột phải vào desktop chọn New rồi chọn Text Document để tạo một Notepad.

Bước 4: Tiếp theo, bạn copy và paste dòng code sau đây vào Notepad (nhìn có vẻ dài nhưng các bạn chỉ cần copy paste hết vô là được):

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()
}

Bước 5: Sau đó, bạn copy và paste tiếp dòng code sau đây vào cuối Notepad.

BS := new BrightnessSetter()

PgUp::BS.SetBrightness(10)
PgDn::BS.SetBrightness(-10)

Đây chính dòng code cho phép bạn tùy biến mức độ tăng giảm độ sáng. Cụ thể chi tiết thì dòng code này sẽ tạo một tính năng là mỗi lần bạn nhấn phím Page Up (PgUp) sẽ làm tăng độ sáng, còn phím Page Down (PgDn) sẽ làm giảm độ sáng. 

Còn mức độ tăng giảm bao nhiêu sẽ nằm ở trong ngoặc, ví dụ như bạn thấy trong đoạn code ghi sẵn là (10)(-10), tức là mức độ tăng giảm độ sáng mỗi lần nhấn pím là 10 đơn vị. Bạn có thể thoải mái chính con số bao nhiêu tùy thích, hay thậm chí là chỉnh đơn vị là 50 để chỉ cần nhấn phím 1 cái là tăng giảm 1 nửa độ sáng.

Bước 6: Sau khi tùy chỉnh hoàn tất, bạn chọn File rồi chọn Save as. Sau đó ở dòng File name, bạn đặt một tên bất kỳ với đuôi là .ahk. Ví dụ như test.ahk. Còn ở dòng Save as type bạn chọn All files.

Sau khi lưu xong, bạn sẽ thấy file test.ahk hoặc bất kỳ tên nào bạn đã đặt xuất hiện trên desktop. Bây giờ bạn nhấn đúp để mở file, file sẽ tự động chạy và bạn bắt đầu có thể dùng phím PgUp và PgDn để tăng giảm độ sáng.

Nếu bạn muốn tắt file này đi, nhấp chuột phải vào biểu tượng chữ H của file trên thanh Taskbar và chọn Exit.

Vậy là mình đã hướng dẫn xong cho các bạn cách tùy biến mức độ tăng giảm độ sáng màn hình trên Windows 10. Chúc các bạn thành công!

Bình luận của bạn sẽ được duyệt trước khi đăng lên