找回密码  加入

AUTOIT CN

搜索
查看: 162|回复: 0

[系统综合] 求大神帮我转换 AHK 代码为 AU3

[复制链接]
发表于 2019-6-5 15:36:16 | 显示全部楼层 |阅读模式
下面的代码是用来调节笔记本显示屏亮度的,它有个好处是,调节亮度的时候,有OSD显示。求大神帮我转换成AU3代码,不胜感激!
用法:
brightness 3         ;在原有亮度基础上增加3档
brightness -2        ;在原有亮度基础上降低2档

  1. #singleinstance,force
  2. #NoTrayIcon

  3. value=%1%
  4. BS := new BrightnessSetter()
  5. BS.SetBrightness(value)

  6. Exitapp

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

  11.         __New() {
  12.                 if (BrightnessSetter.IsOnAc(AC))
  13.                         this._AC := AC
  14.                 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
  15.                         OnMessage(this._WM_POWERBROADCAST, ((this.pwrBroadcastFunc := ObjBindMethod(this, "_On_WM_POWERBROADCAST"))))
  16.         }

  17.         __Delete() {
  18.                 if (this.pwrAcNotifyHandle) {
  19.                         OnMessage(BrightnessSetter._WM_POWERBROADCAST, this.pwrBroadcastFunc, 0)
  20.                         ,DllCall("UnregisterPowerSettingNotification", "Ptr", this.pwrAcNotifyHandle)
  21.                         ,this.pwrAcNotifyHandle := 0
  22.                         ,this.pwrBroadcastFunc := ""
  23.                 }
  24.         }

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

  32.                 if (increment == 0 && !jump) {
  33.                         if (showOSD)
  34.                                 BrightnessSetter._ShowBrightnessOSD()
  35.                         return
  36.                 }

  37.                 if (!ptrAnotherScheme ? DllCall(PowerGetActiveScheme, "Ptr", 0, "Ptr*", currSchemeGuid, "UInt") == 0 : DllCall("powrprof\PowerDuplicateScheme", "Ptr", 0, "Ptr", ptrAnotherScheme, "Ptr*", currSchemeGuid, "UInt") == 0) {
  38.                         if (autoDcOrAc == -1) {
  39.                                 if (this != BrightnessSetter) {
  40.                                         AC := this._AC
  41.                                 } else {
  42.                                         if (!BrightnessSetter.IsOnAc(AC)) {
  43.                                                 DllCall("LocalFree", "Ptr", currSchemeGuid, "Ptr")
  44.                                                 return
  45.                                         }
  46.                                 }
  47.                         } else {
  48.                                 AC := !!autoDcOrAc
  49.                         }

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

  54.                                 if (jump || !((currBrightness == maxBrightness && increment > 0) || (currBrightness == minBrightness && increment < minBrightness))) {
  55.                                         if (currBrightness + increment > maxBrightness)
  56.                                                 increment := maxBrightness
  57.                                         else if (currBrightness + increment < minBrightness)
  58.                                                 increment := minBrightness
  59.                                         else
  60.                                                 increment += currBrightness

  61.                                         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) {
  62.                                                 ; 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
  63.                                                 if (!PowerApplySettingChanges || DllCall(PowerApplySettingChanges, "Ptr", BrightnessSetter._GUID_VIDEO_SUBGROUP(), "Ptr", BrightnessSetter._GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS(), "UInt") != 0)
  64.                                                         DllCall(PowerSetActiveScheme, "Ptr", 0, "Ptr", currSchemeGuid, "UInt")
  65.                                         }
  66.                                 }

  67.                                 if (showOSD)
  68.                                         BrightnessSetter._ShowBrightnessOSD()
  69.                         }
  70.                         DllCall("LocalFree", "Ptr", currSchemeGuid, "Ptr")
  71.                 }
  72.         }

  73.         IsOnAc(ByRef acStatus)
  74.         {
  75.                 static SystemPowerStatus
  76.                 if (!VarSetCapacity(SystemPowerStatus))
  77.                         VarSetCapacity(SystemPowerStatus, 12)

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

  82.                 return False
  83.         }
  84.        
  85.         GetDefaultBrightnessIncrement()
  86.         {
  87.                 static ret := 10
  88.                 DllCall("powrprof\PowerReadValueIncrement", "Ptr", BrightnessSetter._GUID_VIDEO_SUBGROUP(), "Ptr", BrightnessSetter._GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS(), "UInt*", ret, "UInt")
  89.                 return ret
  90.         }

  91.         GetMinBrightness()
  92.         {
  93.                 static ret := -1
  94.                 if (ret == -1)
  95.                         if (DllCall("powrprof\PowerReadValueMin", "Ptr", BrightnessSetter._GUID_VIDEO_SUBGROUP(), "Ptr", BrightnessSetter._GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS(), "UInt*", ret, "UInt"))
  96.                                 ret := 0
  97.                 return ret
  98.         }

  99.         GetMaxBrightness()
  100.         {
  101.                 static ret := -1
  102.                 if (ret == -1)
  103.                         if (DllCall("powrprof\PowerReadValueMax", "Ptr", BrightnessSetter._GUID_VIDEO_SUBGROUP(), "Ptr", BrightnessSetter._GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS(), "UInt*", ret, "UInt"))
  104.                                 ret := 100
  105.                 return ret
  106.         }

  107.         _GetCurrentBrightness(schemeGuid, AC, ByRef currBrightness)
  108.         {
  109.                 static PowerReadACValueIndex := DllCall("GetProcAddress", "Ptr", BrightnessSetter.hPowrprofMod, "AStr", "PowerReadACValueIndex", "Ptr")
  110.                           ,PowerReadDCValueIndex := DllCall("GetProcAddress", "Ptr", BrightnessSetter.hPowrprofMod, "AStr", "PowerReadDCValueIndex", "Ptr")
  111.                 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
  112.         }
  113.        
  114.         _ShowBrightnessOSD()
  115.         {
  116.                 static PostMessagePtr := DllCall("GetProcAddress", "Ptr", DllCall("GetModuleHandle", "Str", "user32.dll", "Ptr"), "AStr", A_IsUnicode ? "PostMessageW" : "PostMessageA", "Ptr")
  117.                           ,WM_SHELLHOOK := DllCall("RegisterWindowMessage", "Str", "SHELLHOOK", "UInt")
  118.                 if A_OSVersion in WIN_VISTA,WIN_7
  119.                         return
  120.                 BrightnessSetter._RealiseOSDWindowIfNeeded()
  121.                 ; Thanks to YashMaster @ https://github.com/YashMaster/Tweaky/blob/master/Tweaky/BrightnessHandler.h for realising this could be done:
  122.                 if (BrightnessSetter._osdHwnd)
  123.                         DllCall(PostMessagePtr, "Ptr", BrightnessSetter._osdHwnd, "UInt", WM_SHELLHOOK, "Ptr", 0x37, "Ptr", 0)
  124.         }

  125.         _RealiseOSDWindowIfNeeded()
  126.         {
  127.                 static IsWindow := DllCall("GetProcAddress", "Ptr", DllCall("GetModuleHandle", "Str", "user32.dll", "Ptr"), "AStr", "IsWindow", "Ptr")
  128.                 if (!DllCall(IsWindow, "Ptr", BrightnessSetter._osdHwnd) && !BrightnessSetter._FindAndSetOSDWindow()) {
  129.                         BrightnessSetter._osdHwnd := 0
  130.                         try if ((shellProvider := ComObjCreate("{C2F03A33-21F5-47FA-B4BB-156362A2F239}", "{00000000-0000-0000-C000-000000000046}"))) {
  131.                                 try if ((flyoutDisp := ComObjQuery(shellProvider, "{41f9d2fb-7834-4ab6-8b1b-73e74064b465}", "{41f9d2fb-7834-4ab6-8b1b-73e74064b465}"))) {
  132.                                          DllCall(NumGet(NumGet(flyoutDisp+0)+3*A_PtrSize), "Ptr", flyoutDisp, "Int", 0, "UInt", 0)
  133.                                         ,ObjRelease(flyoutDisp)
  134.                                 }
  135.                                 ObjRelease(shellProvider)
  136.                                 if (BrightnessSetter._FindAndSetOSDWindow())
  137.                                         return
  138.                         }
  139.                         ; 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
  140.                         Loop 2 {
  141.                                 SendEvent {Volume_Mute 2}
  142.                                 if (BrightnessSetter._FindAndSetOSDWindow())
  143.                                         return
  144.                                 Sleep 100
  145.                         }
  146.                 }
  147.         }
  148.        
  149.         _FindAndSetOSDWindow()
  150.         {
  151.                 static FindWindow := DllCall("GetProcAddress", "Ptr", DllCall("GetModuleHandle", "Str", "user32.dll", "Ptr"), "AStr", A_IsUnicode ? "FindWindowW" : "FindWindowA", "Ptr")
  152.                 return !!((BrightnessSetter._osdHwnd := DllCall(FindWindow, "Str", "NativeHWNDHost", "Str", "", "Ptr")))
  153.         }

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

  162.         _GUID_VIDEO_SUBGROUP()
  163.         {
  164.                 static GUID_VIDEO_SUBGROUP__
  165.                 if (!VarSetCapacity(GUID_VIDEO_SUBGROUP__)) {
  166.                          VarSetCapacity(GUID_VIDEO_SUBGROUP__, 16)
  167.                         ,NumPut(0x7516B95F, GUID_VIDEO_SUBGROUP__, 0, "UInt"), NumPut(0x4464F776, GUID_VIDEO_SUBGROUP__, 4, "UInt")
  168.                         ,NumPut(0x1606538C, GUID_VIDEO_SUBGROUP__, 8, "UInt"), NumPut(0x99CC407F, GUID_VIDEO_SUBGROUP__, 12, "UInt")
  169.                 }
  170.                 return &GUID_VIDEO_SUBGROUP__
  171.         }

  172.         _GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS()
  173.         {
  174.                 static GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__
  175.                 if (!VarSetCapacity(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__)) {
  176.                          VarSetCapacity(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 16)
  177.                         ,NumPut(0xADED5E82, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 0, "UInt"), NumPut(0x4619B909, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 4, "UInt")
  178.                         ,NumPut(0xD7F54999, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 8, "UInt"), NumPut(0xCB0BAC1D, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 12, "UInt")
  179.                 }
  180.                 return &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__
  181.         }

  182.         _GUID_ACDC_POWER_SOURCE()
  183.         {
  184.                 static GUID_ACDC_POWER_SOURCE_
  185.                 if (!VarSetCapacity(GUID_ACDC_POWER_SOURCE_)) {
  186.                          VarSetCapacity(GUID_ACDC_POWER_SOURCE_, 16)
  187.                         ,NumPut(0x5D3E9A59, GUID_ACDC_POWER_SOURCE_, 0, "UInt"), NumPut(0x4B00E9D5, GUID_ACDC_POWER_SOURCE_, 4, "UInt")
  188.                         ,NumPut(0x34FFBDA6, GUID_ACDC_POWER_SOURCE_, 8, "UInt"), NumPut(0x486551FF, GUID_ACDC_POWER_SOURCE_, 12, "UInt")
  189.                 }
  190.                 return &GUID_ACDC_POWER_SOURCE_
  191.         }

  192. }

  193. BrightnessSetter_new() {
  194.         return new BrightnessSetter()
  195. }

复制代码





您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2019-6-19 22:19 , Processed in 0.062501 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表