#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=Pic\icon.ico
#AutoIt3Wrapper_outfile=Window Handler.exe
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_Fileversion=1.1.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Skilkor(www.autoit.de)
#AutoIt3Wrapper_Res_Language=1031
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
;==============
#region ### #include ###
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <Array.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WinAPI.au3>
#endregion ### #include ###
;=============
#region ### Global ###
Global $WinStateCode, $LabelName, $LabelPosX, $LabelPosY, $WinWidth, $WinHeigh, $Status, $MUp, $MLeft, $MRight, $MDown, $GUp, $GLeft, $GRight, $GDown, $Aktual, $Safe, $Gesp, $Move, $Glob_Res, $Art, $Ini_Op
;~
Global $Grp[5][5] = 	[['Optionen', 5, 400, 330, 50]						,['Desktop Fenster', 5, 0, 330, 400]		,['Fenster Info', 340, 0, 180, 230], _
						 ['Fensterposition Verschieben',340,230,180,90]		,['Fenstergrösse Verändern',340,320,180,90]]
;~
Global $Label[8][6] = 	[[$LabelName, 'Fenster Name: ', 350, 15, 160, 75]	,[$LabelPosX, 'Pos X: ', 350, 90, 160, 20]	,[$LabelPosY, 'Pos Y: ', 350, 110, 160, 20], _
						 [$WinWidth, 'Breite: ', 350, 130, 160, 20]			,[$WinHeigh, 'Höhe: ', 350, 150, 160, 20]	,[$Status, 'Status: ', 350, 170, 160, 20], _
						 [$Glob_Res, 'Globale Auflösung: ',350,190,160,20]	,[$Gesp, 'Gespeichert?: ',350,210,160,20]]
;~
Global $MoveSec[4][6] =	[[$MUp, @ScriptDir & '\Pic\1.jpg',420,250,20,20]	,[$MLeft, @ScriptDir & '\Pic\2.jpg',400,270,20,20], _
						 [$MRight, @ScriptDir & '\Pic\3.jpg', 440,270,20,20],[$MDown, @ScriptDir & '\Pic\4.jpg',420,290,20,20]]
;~
Global $Gro[4][6] =	[[$GUp, @ScriptDir & '\Pic\1.jpg',420,340,20,20]	,[$GLeft, @ScriptDir & '\Pic\2.jpg',400,360,20,20], _
						 [$GRight, @ScriptDir & '\Pic\3.jpg', 440,360,20,20],[$GDown, @ScriptDir & '\Pic\4.jpg',420,380,20,20]]
;~
Global $Button[4][6] =	[[$Aktual, 'Aktuallisieren', 10, 415, 70, 25]		,[$Safe, 'Speichern', 85, 415, 60, 25]	,[$Move, 'Wiederherstellen', 150, 415, 90,25], _
						 [$Ini_Op, 'Ini Öffnen',245,415,60,25]]
;~
Global $ListView[5] = ['', 15, 15, 310, 375]
Global $Header = 'Nr|Titel|Status'
Global $LV_Style = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
Global $LV_EX_STYLE = BitOR($LVS_EX_SUBITEMIMAGES, $LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT)
;~
Global $WinList = WinList()
;~
Global $WinStateCode[11][2] = 	[['1', 'Existiert']							,['2', 'Sichtbar']						,['4', 'Freigegeben'], _
								 ['8', 'Aktiv']								,['16', 'Minimiert']					,['32', 'Maximiert'], _
								 ['5', $WinStateCode[0][1]]					,['7', $WinStateCode[1][1]]				,['23', $WinStateCode[4][1]], _
								 ['39', $WinStateCode[5][1]]				,['47', $WinStateCode[5][1]]]
;~
Global $ReadListView = GUICtrlRead(GUICtrlRead($ListView))
;~
Global $aRes = _GetGlobalResolution()
#endregion ### Global ###
;=============
#region ### GUI ###
#region ### $hGui ###
$hGui = GUICreate('Window Handler Prog', 525, 455, 500, 370)
#endregion ### $hGui ###
;=============
#region ### Gui Aufbau ###
For $i = 0 To UBound($Label) - 1
	$Label[$i][0] = GUICtrlCreateLabel($Label[$i][1], $Label[$i][2], $Label[$i][3], $Label[$i][4], $Label[$i][5])
Next
;~
For $i = 0 To UBound($Grp) - 1
	GUICtrlCreateGroup($Grp[$i][0], $Grp[$i][1], $Grp[$i][2], $Grp[$i][3], $Grp[$i][4])
Next
;~
For $i = 0 To UBound($MoveSec) - 1
	$MoveSec[$i][0] = GUICtrlCreatePic($MoveSec[$i][1], $MoveSec[$i][2], $MoveSec[$i][3], $MoveSec[$i][4], $MoveSec[$i][5])
Next
;~
For $i = 0 To UBound($Gro) - 1
	$Gro[$i][0] = GUICtrlCreatePic($Gro[$i][1], $Gro[$i][2], $Gro[$i][3], $Gro[$i][4], $Gro[$i][5])
Next
#endregion ### Gui Aufbau ###
;=============
#region ### Listview ###
$ListView = GUICtrlCreateListView($Header, 15, 15, 310, 380, $LV_Style, $LV_EX_STYLE)
GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 0, 30)
GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 1, 200)
GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 2, 67)
;~
For $i = 0 To $WinList[0][0]
	If $WinList[$i][0] <> '' And _IsVisible($WinList[$i][1]) Then
		GUICtrlCreateListViewItem($i & '|' & $WinList[$i][0] & '|' & _WinState($i), $ListView)
	EndIf
Next
#endregion ### Listview ###
;=============
#region ### Button ###
For $i = 0 To UBound($Button) - 1
	$Button[$i][0] = GUICtrlCreateButton($Button[$i][1], $Button[$i][2], $Button[$i][3], $Button[$i][4], $Button[$i][5])
Next
#endregion ### Button ###
GUISetState(@SW_SHOW)
#endregion ### GUI ###
;=============
GUICtrlSetData($Label[6][0], 'Globale Auflösung: ' & $aRes[2] & 'x' & $aRes[3])
#region ### Gui Event ###
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button[0][0] ;Aktuallisieren Button
			_Aktual()
		Case $Button[1][0] ;Speichern Button
			_Save()
		Case $Button[2][0] ;zu gesp. Coords Bewegen Button
			_Move()
		Case $Button[3][0] ;Ini Öffnen
			ShellExecute(@ScriptDir & '\Save Data.ini', '', '')
		Case $MoveSec[0][0] ;Up Pic (Button)
			_WinMoveSec(1)
		Case $MoveSec[1][0] ;Left Pic (Button)
			_WinMoveSec(2)
		Case $MoveSec[2][0] ;Right Pic (Button)
			_WinMoveSec(3)
		Case $MoveSec[3][0] ;Down Pic (Button)
			_WinMoveSec(4)
		Case $Gro[0][0] ;Up Pic (Button)
			_WinGroMove(1)
		Case $Gro[1][0] ;Left Pic (Button)
			_WinGroMove(2)
		Case $Gro[2][0] ;Right Pic (Button)
			_WinGroMove(3)
		Case $Gro[3][0] ;Down Pic (Button)
			_WinGroMove(4)
	EndSwitch
;~
	Select
		Case $nMsg = 'clicked=' ;Wenn ein ListViewItem Ausgewählt/Angeklickt wird
			_LVItemSelected()
	EndSelect
WEnd
#endregion ### Gui Event ###
;=============
#region ### Functionen ###
;=============
#region ### _IsVisible() ###
Func _IsVisible($handle)
	If BitAND(WinGetState($handle), 2) Then
		Return 1
	Else
		Return 0
	EndIf
EndFunc   ;==>_IsVisible
#endregion ### _IsVisible() ###
;=============
#region ### _Aktual() ###
Func _Aktual()
	_GUICtrlListView_DeleteAllItems($ListView)
;~
	For $i = 0 To UBound($WinList) - 1
		If $WinList[$i][0] <> '' And _IsVisible($WinList[$i][1]) Then
			GUICtrlCreateListViewItem($i & '|' & $WinList[$i][0] & '|' & _WinState($i), $ListView)
		EndIf
	Next
EndFunc   ;==>_Aktual
#endregion ### _Aktual() ###
;=============
#region ### _WinState($i) ###
Func _WinState($i)
	For $a = 0 To UBound($WinStateCode) - 1
		If $WinList[$i][0] = 'Window Handler Prog' Then
			Return 'Maximiert'
		EndIf
;~
		If WinGetState($WinList[$i][0]) = $WinStateCode[$a][0] Then
			Return $WinStateCode[$a][1]
		EndIf
	Next
EndFunc   ;==>_WinState
#endregion ### _WinState($i) ###
;=============
#region ### _LVItemSelected() ###
Func _LVItemSelected()
	If GUICtrlRead(GUICtrlRead($ListView)) = 0 Then
		Return
	EndIf
;~
	If GUICtrlRead($Label[0][0]) = GUICtrlRead(GUICtrlRead($ListView)) Then
		Return
	ElseIf GUICtrlRead(GUICtrlRead($ListView)) = Not 0 Then
		Sleep(100)
		GUICtrlSetData($Label[0][0], 'Fenster Name: ' & @CRLF & _Splitt(2))
;~
		For $i = 1 To UBound($Label) - 1
			GUICtrlSetData($Label[$i][0], $Label[$i][1] & _WinPos($i))
		Next
;~
		GUICtrlSetData($Label[5][0], 'Status: ' & _Splitt(3))
;~
		GUICtrlSetData($Label[6][0], 'Globale Auflösung: ' & $aRes[2] & 'x' & $aRes[3])
;~
		GUICtrlSetData($Label[7][0], $Label[7][1] & _SafeVor())
	EndIf
EndFunc   ;==>_LVItemSelected
#endregion ### _LVItemSelected() ###
;=============
#region ### _Splitt() ###
Func _Splitt($Split = 0)
	Local $RLV = GUICtrlRead(GUICtrlRead($ListView))
	Local $SSplit = StringSplit($RLV, '|', 0)
;~
	For $i = 0 To UBound($SSplit) - 1
		If $Split >= 4 Then
			Return
		EndIf
;~
		If $Split = $i Then
			Return $SSplit[$i]
		EndIf
	Next
EndFunc   ;==>_Splitt
#endregion ### _Splitt() ###
;=============
#region ### _WinPos() ###
Func _WinPos($Pos = 0)
	Local $WinPos = WinGetPos(_Splitt(2))
;~
	For $i = 1 To UBound($WinPos)
		If $Pos = $i Then
			Return $WinPos[$i - 1]
		EndIf
	Next
EndFunc   ;==>_WinPos
#endregion ### _WinPos() ###
;=============
#region ### _Save() ###
Func _Save()
	For $i = 1 To 4
		IniWrite('Save Data.ini', _Splitt(2), $Label[$i][1], _WinPos($i))
	Next
	FileWrite('Save Data.ini', @CRLF)
EndFunc   ;==>_Save
#endregion ### _Save() ###
;=============
#region ### _Move() ###
Func _Move()
	Local $Ini[5] = ['', '', '', '', '']
	For $i = 0 To 4
		$Ini[$i] = IniRead('Save Data.ini', _Splitt(2), $Label[$i][1], '')
	Next
;~
	WinMove(_Splitt(2), '', $Ini[1], $Ini[2], $Ini[3], $Ini[4])
EndFunc   ;==>_Move
#endregion ### _Move() ###
;=============
#region ### _GetGlobalResolution() ###
Func _GetGlobalResolution()
	Local $aRes[4], $hWindow, $stRET
	$hWindow = _WinAPI_GetDesktopWindow()
	$stRET = _WinAPI_GetWindowPlacement($hWindow)
	If Not @error Then
		$aRes[0] = DllStructGetData($stRET, 'rcNormalPosition', 1) ; left
		$aRes[1] = DllStructGetData($stRET, 'rcNormalPosition', 2) ; top
		$aRes[2] = DllStructGetData($stRET, 'rcNormalPosition', 3) ; right
		$aRes[3] = DllStructGetData($stRET, 'rcNormalPosition', 4) ; bottom
		Return $aRes
	Else
		Return SetError(1, 0, 0)
	EndIf

EndFunc   ;==>_GetGlobalResolution
#endregion ### _GetGlobalResolution() ###
;=============
#region ### _WinMoveSec() ###
Func _WinMoveSec($Art = 0)
	For $i = 1 To 4
		If $Art = 1 Then
			WinMove(_Splitt(2), '', _WinPos(1), _WinPos(2), _WinPos(3), _WinPos(4) - 1)
		ElseIf $Art = 2 Then
			WinMove(_Splitt(2), '', _WinPos(1), _WinPos(2), _WinPos(3) - 1, _WinPos(4))
		ElseIf $Art = 3 Then
			WinMove(_Splitt(2), '', _WinPos(1), _WinPos(2), _WinPos(3) + 1, _WinPos(4))
		ElseIf $Art = 4 Then
			WinMove(_Splitt(2), '', _WinPos(1), _WinPos(2), _WinPos(3), _WinPos(4) + 1)
		EndIf
	Next
EndFunc   ;==>_WinMoveSec
#endregion ### _WinMoveSec() ###
;=============
#region ### _WinGroMove() ###
Func _WinGroMove($Art = 0)
	For $i = 1 To 4
		If $Art = 1 Then
			WinMove(_Splitt(2), '', _WinPos(1), _WinPos(2) - 1, _WinPos(3), _WinPos(4))
		ElseIf $Art = 2 Then
			WinMove(_Splitt(2), '', _WinPos(1) - 1, _WinPos(2), _WinPos(3), _WinPos(4))
		ElseIf $Art = 3 Then
			WinMove(_Splitt(2), '', _WinPos(1) + 1, _WinPos(2), _WinPos(3), _WinPos(4))
		ElseIf $Art = 4 Then
			WinMove(_Splitt(2), '', _WinPos(1), _WinPos(2) + 1, _WinPos(3), _WinPos(4))
		EndIf
	Next
EndFunc   ;==>_WinGroMove
#endregion ### _WinGroMove() ###
;=============
#region ### _SafeVor() ###
Func _SafeVor()
	Local $ini_vor = IniReadSection('Save Data.ini', _Splitt(2))
	If IsArray($ini_vor) = 1 Then
		Return 'Ja'
	Else
		Return 'Nein'
	EndIf
EndFunc   ;==>_SafeVor
#endregion ### _SafeVor() ###
;=============
#endregion ### Functionen ###
