Jump to content

change windows power performance


Recommended Posts

To start you up with UIAutomation :

#NoTrayIcon
#include "Includes\CUIAutomation2.au3"
#include <Constants.au3>

Opt ("MustDeclareVars", 1)

_Systray_SelectOption()

Func _Systray_SelectOption()
  Local $hWnd = WinGetHandle('[Class:Shell_TrayWnd]')
  If Not $hWnd Then Return SetError(1)

  Local $hCtrl = ControlGetHandle($hWnd, '', "ToolbarWindow323")
  If Not $hCtrl Then Return SetError(2)

  ; Create UI Automation object
  Local $oUIAutomation = ObjCreateInterface($sCLSID_CUIAutomation, $sIID_IUIAutomation, $dtagIUIAutomation)
  If Not IsObj($oUIAutomation) Then Return ConsoleWrite("$oUIAutomation ERR" & @CRLF)
  ConsoleWrite("$oUIAutomation OK" & @CRLF)

  ; Get Desktop element
  Local $pDesktop, $oDesktop
  $oUIAutomation.GetRootElement($pDesktop)
  $oDesktop = ObjCreateInterface($pDesktop, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
  If Not IsObj($oDesktop) Then Return ConsoleWrite("$oDesktop ERR" & @CRLF)
  ConsoleWrite("$oDesktop OK" & @CRLF)

  ; Get element by handle
  Local $pElement, $oElement
  $oUIAutomation.ElementFromHandle($hCtrl, $pElement)
  $oElement = ObjCreateInterface($pElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
  If Not IsObj($oElement) Then Return ConsoleWrite("$oElement ERR" & @CRLF)
  ConsoleWrite("$oElement OK" & @CRLF)

  ; Get condition (ControlType = Button)
  Local $pCondition, $oCondition
  $oUIAutomation.CreatePropertyCondition($UIA_ControlTypePropertyId, $UIA_ButtonControlTypeId, $pCondition)
  $oCondition = ObjCreateInterface($pCondition, $sIID_IUIAutomationPropertyCondition, $dtagIUIAutomationPropertyCondition)
  If Not IsObj($oCondition) Then Return ConsoleWrite("$oCondition ERR" & @CRLF)
  ConsoleWrite("$oCondition OK" & @CRLF)

  ; Find all buttons
  Local $pElementArray, $oElementArray, $iElements
  $oElement.FindAll($TreeScope_Children, $oCondition, $pElementArray)
  $oElementArray = ObjCreateInterface($pElementArray, $sIID_IUIAutomationElementArray, $dtagIUIAutomationElementArray)
  $oElementArray.Length($iElements)
  If Not IsObj($oElementArray) Then Return ConsoleWrite("$oElementArray ERR" & @CRLF)
  ConsoleWrite("$oElementArray OK" & @CRLF)

  ; Get array of buttons
  Local $aElements[$iElements]
  For $i = 0 To $iElements - 1
    $oElementArray.GetElement($i, $pElement)
    $aElements[$i] = ObjCreateInterface($pElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
  Next

  ; Get name and position for each button
  Local $vValue, $bFound = False
  Local $tPoint = DllStructCreate("long X;long Y"), $bBool
  For $i = 0 To UBound($aElements) - 1
    $aElements[$i].GetCurrentPropertyValue($UIA_NamePropertyId, $vValue)
    ConsoleWrite("Name:" & $vValue & @CRLF)
    $aElements[$i].GetClickablePoint ($tPoint, $bBool)
    If StringRegExp ($vValue, "\(\d{1,3}.%\)") Then
      MouseClick ("left", $tPoint.X, $tPoint.Y, 1, 1)
      $bFound = True
      ExitLoop
    EndIf
  Next
  Sleep (1500)

  $oUIAutomation.CreatePropertyCondition( $UIA_ClassNamePropertyId, "Windows.UI.Core.CoreWindow", $pCondition )
  If Not $pCondition Then Return ConsoleWrite( "$pCondition ERR" & @CRLF )
  ConsoleWrite( "$pCondition OK" & @CRLF )

  Local $pPower, $oPower
  $oDesktop.FindFirst( $TreeScope_Descendants, $pCondition, $pPower )
  $oPower = ObjCreateInterface( $pPower, $sIID_IUIAutomationElement, $dtagIUIAutomationElement )
  If Not IsObj( $oPower ) Then Return ConsoleWrite( "$oPower ERR" & @CRLF )
  ConsoleWrite( "$oPower OK" & @CRLF )

  $oUIAutomation.CreatePropertyCondition($UIA_ClassNamePropertyId, "Slider", $pCondition)
  $oCondition = ObjCreateInterface($pCondition, $sIID_IUIAutomationPropertyCondition, $dtagIUIAutomationPropertyCondition)
  If Not IsObj($oCondition) Then Return ConsoleWrite("$oCondition ERR" & @CRLF)
  ConsoleWrite("$oCondition OK" & @CRLF)

  $oPower.FindFirst($TreeScope_Children, $oCondition, $pElement)
  $oElement = ObjCreateInterface($pElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
  If Not IsObj($oElement) Then Return ConsoleWrite("$oElement ERR" & @CRLF)
  ConsoleWrite("$oElement OK" & @CRLF)

  Local $tRect = DllStructCreate("long Left;long Top;long Right;long Bottom")
  $oElement.CurrentBoundingRectangle($tRect)
  ConsoleWrite(" L:" & $tRect.Left & " T:" & $tRect.Top & " R:" & $tRect.Right & " B:" & $tRect.Bottom & @CRLF)
  Local $x = $tRect.Left + Int(($tRect.Right-$tRect.Left)*.5) ; calculate center of slider
  Local $y = $tRect.Top + Int(($tRect.Bottom-$tRect.Top)*.75)
  MouseClick ("left", $x, $y, 1, 1)

EndFunc

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...