#cs ----------------------------------------------------------------------------

		Energy(i)nk mady by Keyle

#ce ----------------------------------------------------------------------------

#include <Constants.au3>
#include <GUIConstantsEx.au3>

Local $foo = Run(@ComSpec & " /c POWERCFG /list", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $Output

While 1
	$Output &= StdoutRead($foo)
	If @error Then ExitLoop
WEnd

$Output = _OEMToAnsi($Output)
$GUID = StringRegExp($Output, "[0-9a-g]{8}-(?:[0-9a-g]{4}-){3}[0-9a-g]{12}", 3)
$AktivGUID = StringRegExp($Output, "\([^\*].*\) ?(\*?)", 3)
$NameGUID = StringRegExp($Output, "\(([^\*].*)\) ?\*?", 3)

Dim $GUIDRadio[UBound($GUID)]

$CL_GUI = GUICreate("Energie-Option-Control", 258, 130 + (20 * UBound($GUID)), 192, 124)

$ChangeDirectCMB = GUICtrlCreateCheckbox("Bei auswahl direkt übernehmen", 20, 26)
GUICtrlSetState(-1, $GUI_CHECKED)

For $i = 0 To UBound($GUID) - 1
	$GUIDRadio[$i] = GUICtrlCreateRadio($NameGUID[$i], 40, 74 + (20 * ($i - 1)), 113, 17)
	If $AktivGUID[$i] <> "" Then
		GUICtrlSetState($GUIDRadio[$i], $GUI_CHECKED)
		$LastAktive = $i
	EndIf
Next
$CreateInk = GUICtrlCreateButton("Verknüpfung auf Desktop erstellen", 16, 74 + (20 * UBound($GUID)), 224, 49)
GUISetState(@SW_SHOW)

TraySetIcon(@SystemDir & "\powercpl.dll", "0")
GUISetIcon(@SystemDir & "\powercpl.dll", "0")

While 1
	$nMsg = GUIGetMsg()
	For $i = 0 To UBound($GUID) - 1
		If GUICtrlRead($GUIDRadio[$i]) = 1 Then
			If $LastAktive <> $i And GUICtrlRead($ChangeDirectCMB) = 1 Then
				Run(@ComSpec & " /c POWERCFG -s " & $GUID[$i], @SystemDir, @SW_HIDE)
				$LastAktive = $i
			EndIf
		EndIf
	Next
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $CreateInk
			FileCreateShortcut(@ComSpec, @DesktopDir & "\" & $NameGUID[$LastAktive] & ".lnk", @WindowsDir, " /c POWERCFG -s " & $GUID[$LastAktive], "Energie Option: " & $NameGUID[$LastAktive], @SystemDir & "\powercpl.dll", "", "0", @SW_SHOWMINNOACTIVE)
	EndSwitch
WEnd


Func _OEMToAnsi($sOEM)
	Local $a_AnsiFName = DllCall('user32.dll', 'Int', 'OemToChar', 'str', $sOEM, 'str', '')
	If @error = 0 Then $sAnsi = $a_AnsiFName[2]
	Return $sAnsi
EndFunc   ;==>_OEMToAnsi