;
; AutoIt Version: 3.3.6.1
; Language:       Deutsch
; Platform:       Win XP
; Author:         
;
; Script Funktion:
;   


#include <WindowsConstants.au3>
#include <_WinStyle.au3>
#include <Date.au3>
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>


Global Const $TrendDir = "C:\Program Files\3S Software\CoDeSys V2.3\Projects\SPS\Trend"
Global Const $IniFile = "C:\Inst\AnwendungenMenues\Script.ini"
Global Const $SpindelLog = "Spindel_*.log"
Global Const $NCServerLogDat = "NCServerLog.dat"
Global Const $NCServerLog = "NCServer.log"
Global Const $mprotLog = "mprot.log"
Global Const $KonfigDat = "Konfig.dat"
Global Const $NCCrashLog = "Cr$Log.dat"
Global Const $SaveDir = "C:\Save"
Global Const $TempDir = "C:\Temp\Trend"

Global Const $SPI_SETWORKAREA = 0x002F
Global Const $SPIF_SENDCHANGE = 0x0002

Global Const $WS_SIZEDBOXED = 0x008C0000


If FileExists ("C:\Inst\AnwendungenMenues\Start_CoDeSysHMI1.cmd") Then
	; Arbeitsbereich des Desktop verändern (maximieren, sonst gilt der Bereich ohne Taskleiste)
	$Rect = DllStructCreate('int;int;int;int')
	DllStructSetData ($Rect, 1, 0) ; left
	DllStructSetData ($Rect, 2, 0) ; top
	DllStructSetData ($Rect, 3, 1280) ; right
	DllStructSetData ($Rect, 4, 1050) ; buttom
	_WinAPI_SystemParametersInfo($SPI_SETWORKAREA, 0, DllStructGetPtr($Rect), $SPIF_SENDCHANGE) 
EndIf


If ($CmdLine[0] = 0) Then
	; Tastatur & Mauseingabe blockieren / Maus verschieben & unsichtbar machen
	; ========================================================================
	BlockInput (1)
	MouseMove (@DesktopWidth, @DesktopHeight)
	GUISetCursor(16,1)


	; Panel starten - GUI Control Style anpassen (fester Rahmen, keine Buttons zum Minimieren, Maximieren, Schliessen)
	; =======================================================================================================================
	If FileExists ("C:\Inst\Panel\XPanel.exe") Then
		If Not (WinExists ("XPanel")) Then			
			ShellExecute ("C:\Inst\Panel\XPanel.exe")
		EndIf
		WinActivate ("XPanel")
		WinWaitActive ("XPanel")
		If FileExists ("C:\Inst\AnwendungenMenues\Start_CoDeSysHMI1.cmd") Then
			ChangeGUIStyle ("XPanel")
			WinMove ("XPanel", "", 0, 0, 1280, 1050)
		EndIf
	Else
		If Not (WinExists ("Inst MMI")) Then			
			Run ("C:\Inst\Panel\Panel.exe", "C:\Inst\Panel")
		EndIf
		WinActivate ("Inst MMI")
	EndIf

	;Log-Dateien sichern
	;===================
	SaveLog ()

	; Startet die erste CoDeSys-Visualisierung
	; ========================================
	StartHMI1 ()
		
	; Startet die zweite CoDeSys-Visualisierung (Bedienfeld)
	; ======================================================
	StartHMI2 ()
	
	; Tastatur & Mauseingabe freigeben
	; ================================
	BlockInput (0)
	GUISetCursor(2,0)

	; Ausblenden der Taskleiste
	; =========================
	If FileExists ("C:\Inst\AnwendungenMenues\Start_CoDeSysHMI1.cmd") Then
		WinSetState("[Class:Shell_TrayWnd]","",@SW_HIDE)
	EndIf
EndIf

If ($CmdLine[0] > 0) Then
	If ($CmdLine[1] <> 'log') Then
		If $CmdLine[1] = "1" Then
			If WinExists ("[TITLE:CoDeSysHMI - SPS.pro;W:1280]") Then
				WinActivate ("[TITLE:CoDeSysHMI - SPS.pro;W:1280]")
			Else
				StartHMI1 ()				
			EndIf
		ElseIf $CmdLine[1] = "2" Then
			If WinExists ("XPanel") Then
				WinActivate ("XPanel")
				ChangeGUIStyle ("XPanel")
			ElseIf WinExists ("Inst MMI") Then
				WinActivate ("Inst MMI")
			ElseIf FileExists ("C:\Inst\Panel\XPanel.exe") Then
				ShellExecute ("C:\Inst\Panel\XPanel.exe")
				WinWaitActive ("XPanel", "", 5)
				ChangeGUIStyle ("XPanel")
			Else
				Run ("C:\Inst\Panel\Panel.exe", "C:\Inst\Panel")
			EndIf
		ElseIf $CmdLine[1] = "trend" Then
			; Verschieben der Trenddateien
			If FileExists ($TrendDir) Then
				FileMove ($TrendDir & "\*.*", $TempDir & "\*.*", 8)
			EndIf

			If FileExists ("C:\Inst\" & $mprotLog) Then
				FileCopy ("C:\Inst\" & $mprotLog, $TempDir, 1)
			ElseIf FileExists ("C:\Inst\system\" & $mprotLog) Then	
				FileCopy ("C:\Inst\system\" & $mprotLog, $TempDir, 1)
			EndIf

			If FileExists ("C:\" & $KonfigDat) Then
				FileCopy ("C:\" & $KonfigDat, $TempDir, 1)
			EndIf

			; ZIP-Datei erstellen
			RunWait (@COMSPEC & ' /c start C:\Inst\ZIP -q -r -S Trend ' & $TempDir, 'C:\')			
			
			; Verzeichnis löschen
			If FileExists ($TempDir) Then
				DirRemove ($TempDir)
			EndIf			
		EndIf
	Else
		;Log-Dateien sichern
		SaveLog ()

		; Verzeichnis erstellen
		If Not FileExists ($SaveDir) Then
			DirCreate ($SaveDir)
		EndIf

		; Umkopieren der Log-Dateien
		If FileExists ("C:\" & $SPSLog) Then
			FileCopy ("C:\" & $SPSLog, $SaveDir, 1)
		EndIf

		; Umkopieren der Log-Dateien
		If FileExists ("C:\" & $SpindelLog) Then
			FileCopy ("C:\" & $SpindelLog, $SaveDir, 1)
		EndIf

		If FileExists ("C:\" & $NCServerLogDat) Then
			FileCopy ("C:\" & $NCServerLogDat, $SaveDir, 1)
		EndIf

		If FileExists ("C:\Inst\system\" & $NCServerLog) Then
			FileCopy ("C:\Inst\system\" & $NCServerLog, $SaveDir, 1)
		EndIf

		If FileExists ("C:\Inst\system\" & $NCCrashLog) Then
			FileCopy ("C:\Inst\system\" & $NCCrashLog, $SaveDir, 1)
		EndIf

		; ZIP-Datei erstellen
		RunWait (@COMSPEC & ' /c start C:\Inst\ZIP -q -r -S LogBackup ' & $SaveDir, 'C:\')
	EndIf
EndIf


Func SaveLog ()
	; Sicherung der Trend-Daten von der CoDeSys
	If FileExists ($TrendDir) Then
		$size = DirGetSize ($TrendDir, 1)
		If ($size[0] > 10485760) Or ($size[1] > 56) Or ($CmdLine[0] = 1) Then
			$SaveTrendDirName = @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & "-" & @MIN & "-" & @SEC
			; Kopieren des Verzeichnises Trend
			DirCopy ($TrendDir, $SaveDir & "\" & $SaveTrendDirName)
			; Löschen aller Dateien im Verzeichnis Trend
			$DeleteFileName = $TrendDir & "\*.trd"
			FileDelete ($DeleteFileName)
		EndIf
	
		; Wenn mehr als 5 Verzeichnisse oder der Order $SaveDir > 50MB ist
		; Verzeichnisse löschen, die älter als 60 Tage  (ca. 2 Monate) sind
		If FileExists ($SaveDir) Then
			$sizeSaveDir = DirGetSize ($SaveDir, 1)
			If ($sizeSaveDir[2] > 25) Or ($sizeSaveDir[0] > 104857600) Then
				$hFind = FileFindFirstFile($SaveDir & "\*.*")
				If $hFind <> -1 Then
					While 1
						$hFile = FileFindNextFile ($hFind)
						If @error Then ExitLoop				
						If StringInStr (FileGetAttrib ($SaveDir & '\' & $hFile), 'D') Then
							$sDate = StringRegExpReplace (FileGetTime ($SaveDir & '\' & $hFile, 1, 1), '(\d{4})(\d{2})(\d{2})(.*)', '$1/$2/$3')									
							If _DateDiff ('D', $sDate, _NowCalc()) > 15 Then						
								DirRemove ($SaveDir & '\' & $hFile, 1)						
							EndIf
						EndIf		
					WEnd				
				EndIf
				FileClose ($hFind)
			EndIf
		Else
			DirCreate ($SaveDir)
		EndIf 
	Else
		DirCreate ($TrendDir)
	EndIf
EndFunc


Func StartHMI1 ()
	If FileExists ("C:\Inst\AnwendungenMenues\Start_CoDeSysHMI1.cmd") Then
		If FileExists ("C:\Program Files\3S Software\CoDeSys V2.3\CoDeSysHMI\CoDeSysHMI PLC Visu.ini") Then
			FileCopy ("C:\Program Files\3S Software\CoDeSys V2.3\CoDeSysHMI\CoDeSysHMI PLC Visu.ini", "C:\Program Files\3S Software\CoDeSys V2.3\CoDeSysHMI\CoDeSysHMI.ini", 9)
		EndIf
		Run ("C:\Inst\AnwendungenMenues\Start_CoDeSysHMI1.cmd", "", @SW_HIDE)
		WinWait ("CoDeSysHMI - SPS.pro - [START]")
		WinActivate ("CoDeSysHMI - SPS.pro - [START]")
		WinWaitActive ("CoDeSysHMI - SPS.pro - [START]")
		ChangeGUIStyle("CoDeSysHMI - SPS.pro - [START]") 
	Else
		Run ("C:\Inst\AnwendungenMenues\Start_Visu.cmd", "", @SW_HIDE)
	EndIf
EndFunc

Func StartHMI2 ()
	If FileExists ("C:\Inst\AnwendungenMenues\Start_CoDeSysHMI1.cmd") Then
		If FileExists ("C:\Program Files\3S Software\CoDeSys V2.3\CoDeSysHMI\CoDeSysHMI Bedienfeld.ini") Then
			FileCopy ("C:\Program Files\3S Software\CoDeSys V2.3\CoDeSysHMI\CoDeSysHMI Bedienfeld.ini", "C:\Program Files\3S Software\CoDeSys V2.3\CoDeSysHMI\CoDeSysHMI.ini", 9)
		EndIf
		Run ("C:\Inst\AnwendungenMenues\Start_CoDeSysHMI2.cmd", "", @SW_HIDE)
		WinWait ("CoDeSysHMI - SPS.pro - [BEDIENFELD]")
		WinActivate ("CoDeSysHMI - SPS.pro - [BEDIENFELD]")			
		WinWaitActive ("CoDeSysHMI - SPS.pro - [BEDIENFELD]") 
		WinSetOnTop ("CoDeSysHMI - SPS.pro - [BEDIENFELD]", "", 1)
		ChangeGUIStyle("CoDeSysHMI - SPS.pro - [BEDIENFELD]")
	EndIf
EndFunc


Func ChangeGUIStyle ($title)
	Local $wh
	
	$wh = WinGetHandle ($title) 
	$WinStyle = _WinGetStyle ($wh)
	_WinSetStyle ($wh, "", BitAND ($WinStyle[0], BitNOT ($WS_SIZEDBOXED)))	
EndFunc

