#include <GUIConstantsEx.au3>
#include <Array.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

Global $Guisize[2] = [@DesktopWidth, @DesktopHeight]
Global $GuiStyle[2] = [$WS_POPUPWINDOW,$WS_EX_TOOLWINDOW]
Global $GuiBKColor = 0x0
Global $LabelBKColor = 0x0
Global $LabelColor = 0x00FF00
Global $LabelSize[2] = [40,@DesktopHeight]
Global $LabelAmount = 50
Global $LoggedOut = False
Global $LabelFont = "TERMINAL"
Global $randomA[2] = [0,50]
Global $randomb[2] = [12,20]
Global $Words = "a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|1|2|3|4|5|6|7|8|9|0"
Global $Escapekey = "{ESC}"
Global $Exitkey = "^!l"

Global $LabelOutput
Global $Label[$LabelAmount]
Global $Position[$LabelAmount]
Global $Position2[$LabelAmount]

$Words = StringSplit($Words,"|")

For $i = 0 To $LabelAmount - 1
	$Position[$i] = 0
	$Position2[$i] = Random($randomA[0],$randomA[1])
Next

If @Compiled Then
	;If Not FileExists(@StartupDir&"\Matrix.lnk") Then FileCreateShortcut(@ScriptFullPath,@StartupDir&"\Matrix.lnk")
EndIf

$Form1 = GUICreate("CodeGen", $Guisize[0], $Guisize[1], 0, 0, $GuiStyle[0], $GuiStyle[1])
GUISetBkColor($GuiBKColor)

For $i = 0 To $LabelAmount - 1
	$Label[$i] = GUICtrlCreateLabel("", $i * 40, 0, $LabelSize[0], $LabelSize[1])
	GUICtrlSetBkColor($Label[$i],$LabelBKColor)
	GUICtrlSetColor($Label[$i],$LabelColor)
	GUICtrlSetFont($Label[$i],12,Default,Default,$LabelFont)
Next

GUISetState(@SW_SHOW)

If Not _IsInCMD("normalscreen") Then
	GUISetState(@SW_MAXIMIZE)
EndIf

If _IsInCMD("normalexit") Then
	HotKeySet($Escapekey,"_exit")
Else
	HotKeySet($Escapekey,"_logout")
	HotKeySet($Exitkey,"_exit")
EndIf

While 1
	_aCode()
WEnd

Func _exit()
	Exit
EndFunc

Func _logout()
	If $LoggedOut = True Then Return
	$LoggedOut = True
	$LoginWindow = GUICreate("Login", 328, 154,Default,Default,-1,-1,$Form1)
	$Login = GUICtrlCreateLabel("Login", 112, 8, 75, 36)
	GUICtrlSetFont(-1, 20, 800, 0, "MS Sans Serif")
	$Username = GUICtrlCreateLabel("Benutzername", 16, 48, 72, 17)
	$Password = GUICtrlCreateLabel("Passwort:", 32, 80, 50, 17)
	$UserInput = GUICtrlCreateInput(@UserName, 120, 48, 193, 21)
	$PassInput = GUICtrlCreateInput("", 120, 80, 193, 21)
	ControlFocus($LoginWindow,"",$PassInput)
	$LoginButton = GUICtrlCreateButton("Login", 112, 112, 75, 25)
	GUISetState(@SW_SHOW)
	While 1
		If GUIGetMsg() = $LoginButton Or (_IsPressed("0D") And WinActive($LoginWindow)) Then
			$UN = GUICtrlRead($UserInput)
			$PW = GUICtrlRead($PassInput)
			RunAs($UN, @ComputerName, $PW, 0, @ComSpec & " /c  echo test", @TempDir, @SW_HIDE)
			If Not @error Then
				GUIDelete($LoginWindow)
				$LoggedOut = False
				ExitLoop
			Else
				MsgBox(0,"Fehler","Passwort oder Benutzername falsch!")
			EndIf
		EndIf
		_aCode()
	WEnd
EndFunc

Func _IsInCMD($iCommand)
	If $CmdLine[0] < 1 Then Return 0
	If _ArraySearch($CmdLine,$iCommand) Then Return 1
EndFunc

Func _GetWallpaper()
	$WPPath = RegRead("HKCU\Control Panel\Desktop\","Wallpaper")
	Return $WPPath
EndFunc

Func _aCode()
	For $i = 0 To $LabelAmount - 1
		$LabelOutput = ""
		If $Position2[$i] > 0 Then
			For $n = 0 To $Position2[$i]
				$LabelOutput &= @CRLF
			Next
		EndIf
		$Position[$i] += 1
		If $Position[$i] > Random($randomb[0],$randomb[1]) Then
			$Position[$i] = 1
			$Position2[$i] = Random($randomA[0],$randomA[1])
		EndIf
		For $n = 0 To $Position[$i]
			If Random(0,1) Then
				$LabelOutput &= $Words[Random(1,$Words[0])] & @CRLF
			Else
				$LabelOutput &= StringUpper($Words[Random(1,$Words[0])]) & @CRLF
			EndIf
		Next
		GUICtrlSetData($Label[$i],$LabelOutput)
	Next
EndFunc