#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=icons\orange.ico
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Fileversion=0.1.0.4
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=p
#AutoIt3Wrapper_Res_LegalCopyright=hgfjhgfhjfjhf
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_Field=dsff|dsfsdfdf
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <TrayConstants.au3> ; Required for the $TRAY_CHECKED constant.
#include <MsgBoxConstants.au3>
#include <Date.au3>
#include <File.au3>  ; Für _FileWriteLog

; Läuft mit autoit 3.3.10.2

Opt("TrayMenuMode", 3) ; The default tray menu items will not be shown and items are not checked when selected. These are options 1 and 2 for TrayMenuMode.

;Variablendeklaration
Global $testmodus = "on"

$tempverz = @TempDir ; iconverzeichnis
$intervall = 5000 ;
Global $logdatei = "logdatei.log" ; Zu erzeugende Logdatei
Global $iCount = 0 ; wird in zwei verschiedenen Funktionen benutzt

; Um icons als Symbol in den Tray zu legen: _LegInTray($icon_red)
Global $iconort = "icons" ; Verzeichnis mit den beiden Icons relativ zur .au3
Global $icon_blue = "\blue.ico"
Global $icon_lightblue = "\lightblue.ico"
Global $icon_green = "\green.ico"
Global $icon_orange = "\orange.ico"
Global $icon_red = "\red.ico"
ConsoleWrite(_NowTime() & " OK_01: Variablen wurden deklariert und initialisiert." & @CRLF)


_AbbruchESC()
ConsoleWrite(_NowTime() & " OK_00: Funktion _AbbruchESC() wurde aufgerufen." & @CRLF)

_NurUwePc()
ConsoleWrite(_NowTime() & " OK_00: Funktion _NurUwePc() wurde aufgerufen." & @CRLF)

_IconsInstall()
ConsoleWrite(_NowTime() & " OK_00: Funktion _Icons_Install() wurde aufgerufen." & @CRLF)

_LegInTray($icon_orange)
ConsoleWrite(_NowTime() & " OK_00: Funktion _LegInTray() wurde aufgerufen." & @CRLF)

_TrayMenu()
ConsoleWrite(_NowTime() & " OK_00: Funktion _TrayMenu() wurde aufgerufen." & @CRLF)

; erzeugt ein Menü im Tray-Symbol
Func _TrayMenu()
	; Create a tray item with the radio item parameter selected.
	Local $eins = TrayCreateItem("eins", -1, -1, 0)
	TrayItemSetState(-1, $TRAY_UNCHECKED)

	Local $iAscii = TrayCreateItem("Dezimal, Hexadezimal, Oktal, HTML, ASCII ", -1, -1, 0)
	TrayItemSetState(-1, $TRAY_UNCHECKED)

	Local $drei = TrayCreateItem("drei", -1, -1, 0)
	TrayItemSetState(-1, $TRAY_UNCHECKED)

	TrayCreateItem("") ; Create a separator line.

	Local $iAbout = TrayCreateItem("Über")
	TrayCreateItem("") ; Create a separator line.

	Local $iExit = TrayCreateItem("Beenden")

	TraySetState(1) ; Show the tray menu.

	While 1
		Switch TrayGetMsg()


			Case $iAscii ; eigene Funktion wird aufgerufen
				_AsciiCode()


			Case $iAbout ; Display a message box about the AutoIt version and installation path of the AutoIt executable.
				MsgBox($MB_SYSTEMMODAL, "", Chr(169) & " Uwe Wennmannn " & _NowDate() & @CRLF & @CRLF & _
						"Programmname: " & @ScriptName & @CRLF & _
						"Testmodus: " & $testmodus & @CRLF & _
						"PID: " & @AutoItPID & @CRLF & @CRLF & _
						"Tempverz: " & $tempverz & @CRLF & @CRLF & _
						"AutoIt: " & @AutoItExe & @CRLF & _
						"AutoIt-Version: " & @AutoItVersion & @CRLF & @CRLF)

				; Find the folder of a full path.

			Case $iExit ; Exit the loop.
				_Schliessen()
				ExitLoop
		EndSwitch
	WEnd
EndFunc   ;==>_TrayMenu


; Beispielfunktion
Func _AsciiCode()
	For $I = 32 To 35
		;For $I = 32 To 127
		$iOct = StringFormat("%o", $I); <== Conversion

		TrayTip("Kodierungen", _
				"Dez(imal): " & $I & @CRLF & _
				"Hex(adezimal): " & Hex($I) & @CRLF & _
				"Oktal: " & $iOct & @CRLF & _
				"HTML: " & "&#" & $I & ";" & @CRLF & _
				"Chr (ASCII): " & Chr($I) & @CRLF, 1)

		Sleep(5000)
	Next
	ConsoleWrite(_NowTime() & " OK_03: ASCII-Codes wurden erzeugt." & @CRLF)
EndFunc   ;==>_AsciiCode


; installiert ein paar Icons zur späteren Verwendung
Func _IconsInstall()

	FileInstall("C:\Users\Uwe\My Dropbox\400 - Scriptprogrammierung\AutoIt\TrayApp\icons\blue.ico", $tempverz & "\blue.ico", 1)
	FileInstall("C:\Users\Uwe\My Dropbox\400 - Scriptprogrammierung\AutoIt\TrayApp\icons\lightblue.ico", $tempverz & "\lightblue.ico", 1)
	FileInstall("C:\Users\Uwe\My Dropbox\400 - Scriptprogrammierung\AutoIt\TrayApp\icons\green.ico", $tempverz & "\green.ico", 1)
	FileInstall("C:\Users\Uwe\My Dropbox\400 - Scriptprogrammierung\AutoIt\TrayApp\icons\orange.ico", $tempverz & "\orange.ico", 1)
	FileInstall("C:\Users\Uwe\My Dropbox\400 - Scriptprogrammierung\AutoIt\TrayApp\icons\red.ico", $tempverz & "\red.ico", 1)
	ConsoleWrite(_NowTime() & " OK_04: Alle Icons wurden in " & $tempverz & " kopiert." & @CRLF)
EndFunc   ;==>_IconsInstall


; Dieser Funktion wird oben mit _IconsDelete($icon_rot) oder _IconsDelete($icon_gruen) das zu löschende rote oder grüne Icon übergeben
Func _IconsDelete($icondatei)
	; Create a constant variable in Local scope of the filepath that will be deleted.
	Local Const $sFilePath = @TempDir & $icondatei

	; Delete the icon-file.
	Local $iDelete = FileDelete($sFilePath)

	; Display a message of whether the file was deleted.
	If $iDelete Then
		;MsgBox($MB_SYSTEMMODAL, "", "The file was successfully deleted.")
		TrayTip("OK", "OK: Das Icon " & @TempDir & $icondatei & " wurde wieder gelöscht.", 0, $TIP_ICONASTERISK)
		Sleep(3000) ; Sleep to give tooltip time to display
		TrayTip("clears any tray tip", "", 0)
		ConsoleWrite(_NowTime() & " OK_05: Das Icon " & $sFilePath & " wurde wieder gelöscht." & @CRLF)
	Else
		MsgBox($MB_SYSTEMMODAL, "FEHLER", "Beim Löschen der Datei " & @TempDir & $icondatei & " trat ein FEHLER auf.")
	EndIf
EndFunc   ;==>_IconsDelete


; Abbruchmöglichkeit mit ESCAPE
Func _AbbruchESC()

	HotKeySet("{ESC}", "_Schliessen") ; ruft die Funktion _Schliessen() auf, welches die icons löscht und das Programm dann tastsächlich schließt
	ConsoleWrite(_NowTime() & " OK_05: Der Anwender kann ESC drücken, um das Programm zu beenden." & @CRLF)
EndFunc   ;==>_AbbruchESC


; löscht die icons und beendet das Programm tatsächlich
Func _Schliessen()
	; Wird von _AbbruchESC() aufgerufen
	; ToolTip für 1 Sekunden anzeigen
	;ToolTip("Das Programm " & @ScriptName & " wurde beendet.", 0, 0, "Status", 1, 1)
	TrayTip("Programm wird beendet", "Das Programm " & @ScriptName & " wird beendet.", 0, $TIP_ICONASTERISK)
	Sleep(3000) ; Sleep to give tooltip time to display
	TrayTip("clears any tray tip", "", 0)
	;ToolTip("")
	_IconsLoeschen() ; löscht die zuvor installierten Icons
	Exit ; Beendet das Programm tatsächlich
EndFunc   ;==>_Schliessen


; löscht alle installierten Icons
Func _IconsLoeschen()
	_IconsDelete($icon_blue) ; löscht die icons im Verzeichnis temp
	_IconsDelete($icon_lightblue) ;
	_IconsDelete($icon_green) ;
	_IconsDelete($icon_orange) ;
	_IconsDelete($icon_red) ;
	ConsoleWrite(_NowTime() & " OK_06: Alle Icons wurden gelöscht." & @CRLF)
EndFunc   ;==>_IconsLoeschen


; stellt sicher, dass das Programm nur von meinem PC aus aufgerufen werden kann
Func _NurUwePc()
	; Programm funktioniert stets auf meinem UWE-PC.
	; Programm funktioniert im testmodus ="on" auch auf allen anderen PC
	; Vor der Freigabe muss das Programm hier auf testmodus = "on" geschaltet werden

	$sollip = "192.168.178.28"
	$istip = @IPAddress1
	If ($istip <> $sollip And $testmodus <> "on") Then ; wenn es ein Fremdrechner ist ODER der Testmodus off ist, darf das Programm nicht laufen
		MsgBox(0, "Programmabbruch", "" & @CRLF & "Testmodus = " & $testmodus & @CRLF & " Ist - IP : " & $istip & @CRLF & " Soll - IP : " & $sollip)
		_Schliessen()
	EndIf
	ConsoleWrite(_NowTime() & " OK_07: Testmodus: " & $testmodus & "." & @CRLF)
EndFunc   ;==>_NurUwePc


Func _Zeitsteuerung()
	; Die Funktion _WriteConsoleLog() soll alle 45000 ms aufgerufen werden, während diese Funktion _Zeitsteuerung() läuft.
	AdlibRegister("_AktivLog", $intervall)

	; AdLib functions don't run while a blocking function is shown e.g. MsgBox, InputBox, WinWait, WinWaitClose etc.
	;MsgBox($MB_SYSTEMMODAL, "Laufwerk P:\ wird aktiv gehalten.", "Laufwerk P:\ wird aktiv gehalten.", 3)

	; The AdLib function MyAdLibFunc() will start again.
	; Solange etwas in dieser Funktion läuft, wird die Funktion _WriteConsoleLog() immer wieder ausgeführt.
	While 1
		Sleep(1000)
	WEnd

	; Unregister the function _WriteConsoleLog() from being called every 45000 ms.
	AdlibUnRegister("_Aktivlog")
EndFunc   ;==>_Zeitsteuerung


; optional
Func _WriteConsoleLog()

	$iCount += 1
	; Schreibt in die Console
	ConsoleWrite(_NowTime() & " OK_08: MyAdLibFunc wurde " & $iCount & "-mal aufgerufen." & @CRLF)
	; Ruft das Schreiben des Logfiles immer wieder auf

EndFunc   ;==>_WriteConsoleLog


; Legt eine Logdatei an
Func _AktivLog()
	; Schreibt ein Logfile
	#cs
		If Not _FileCreate("P:\PA\aktiv.bat\aktiv.log") Then
		MsgBox($MB_SYSTEMMODAL, "FEHLER", "FEHLER beim Anlegen der Datei aktiv.log. Fehlernummer: " & @error)
		EndIf
	#ce

	Local $hFile = FileOpen($logdatei, 1)
	Local $botschaft = " OK: " & $iCount
	If _FileWriteLog($hFile, $botschaft) Then ; Write to the logfile passing the filehandle returned by FileOpen.
		_LegInTray($icon_green) ; als Zeichen, dass erfolgreich in die logdatei geschrieben wurde.
		;hinweis() ; "Laufwerk P:\ wird aktiv gehalten" (eigentlich unnötig)
		;$icon = "icons/green.ico"
		;TraySetIcon($icon)
	Else
		_LegInTray($icon_red)
		;ToolTip("FEHLER: Die Datei " & $logdatei & " konnte nicht erreicht werden. (USB-Stecker drin?)", 0, 0, "Status", 3, 1)
		TrayTip("Status", "FEHLER: Die Datei " & $logdatei & " konnte nicht erreicht werden. (USB-Stecker drin?)", 0, $TIP_ICONEXCLAMATION)
		Sleep(3000) ; Sleep to give tooltip time to display
		;ToolTip("")
		TrayTip("clears any tray tip", "", 0)
		;dellog()
	EndIf
	FileClose($hFile) ; Close the filehandle to release the file.

EndFunc   ;==>_AktivLog

; Legt ein Icon als Symbol in den Tray: _LegInTray($icon_red)
Func _LegInTray($buntesicon)
	$icon = @TempDir & $buntesicon
	TraySetIcon($icon)
	ConsoleWrite(_NowTime() & " OK_09: Das Icon " & $icon & " wurde in den Tray gelegt." & @CRLF)
EndFunc   ;==>_LegInTray

