#NoTrayIcon #RequireAdmin #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Version=Beta #AutoIt3Wrapper_Icon=Icon256-32.ico #AutoIt3Wrapper_Res_Description=Simple Tail Programm as an Zabbix Tool #AutoIt3Wrapper_Res_Fileversion=2.0.0.8 #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y #AutoIt3Wrapper_Res_LegalCopyright=2015 Bernhard Linz / Bernhard@znil.de #AutoIt3Wrapper_Res_SaveSource=y #AutoIt3Wrapper_Res_Language=1031 #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** Opt('MustDeclareVars', 1) Opt("GUIOnEventMode", 1) ; Change to OnEvent mode #Region ;************ Includes ************ #Include #Include #Include ;~ #include ;~~~ ;~ #include ;~~~ ;~ #include ;~~~ #include "_ChatBox.au3" #EndRegion ;************ Includes ************ #Region ------ Dim Variables ------------------------------ Global $Form_znilTail Global $EditTailText Global $ButtonStart Global $ButtonStop Global $ButtonOpen Global $CheckboxHighlight Global $CheckboxHideText Global $InputHighlightText Global $InputHidetext Global $ButtonFontMinus Global $ButtonFontPlus Global $iFontsize = 9 Global $nMsg Global $data Global $bUseColorize = False Global $bHideText = False Global $sTailFileName = "" Global $sFormTitle = "znilTail: No File selected" Global $aWndPos Global $iTextLength = 0 Global $LabelCounter Global $iRichEditTextLimit = 2147483647 ; 2GB - 1 Byte Global $ButtonHelp Global $LabelStatus Global $i Global $zabbixAgentName Global $zabbixAgentConfigFile Global $hzabbixAgentConfigFile Global $iCurrentDebugLevel = 99 Global $stemp Global $sRegSubKey Global $bShowZabbixAgentButtons = False Global $bAdminrights = False Global $ButtonDebugLevel3 Global $ButtonDebugLevel4 Global $ButtonRestartAgent Global $iTimer Global $hControl Global $bAboutFormExit = False Global $AboutForm, $AboutGroupBoxFreeware, $AboutLabelFreeware1, $AboutLabelFreeware2,$AboutLabelFreeware3 Global $AboutButtonOK, $AboutLabelWeblink, $AboutGroupboxCommandline, $AboutLabelCommandline Global $AboutLabelAuthor, $AboutLabelVersion, $AboutLabelContact, $nMsg2 Global $aWndPosAboutForm ;Global $iRichEditTextLimit = 1048576 Global $aRegistryBaseServicePaths[3] = ["HKLM\SYSTEM\CurrentControlSet\", _ "HKLM64\SYSTEM\CurrentControlSet\", _ "HKLM\SOFTWARE\Wow6432Node\SYSTEM\CurrentControlSet\"] Global $iRightRegistryPath Global $iTailPos = 0 Global $nBytes = 1024 Global $TailNew = "" Global $sFile Global $iFileSizeLastRun = 0 Global $iFileSizeNow = 0 Global $iRefreshrate = 400 Global $aStatus[4] $aStatus[0] = "-" $aStatus[1] = "\" $aStatus[2] = "|" $aStatus[3] = "/" #EndRegion --- Global Variables ------------------------------ Func _TailBoxCreate($gui,$txt,$x,$y,$w,$h,$bgc,$readonly,$autodetecturl, $style) Local $ret;RichEdit $ret=_GUICtrlRichEdit_Create($gui,"",$x,$y,$w,$h,$style) _GUICtrlRichEdit_AutoDetectURL($ret,$autodetecturl) ;_GUICtrlRichEdit_SetLimitOnText($ret,-1) _GUICtrlRichEdit_SetBkColor($ret,$bgc) _GUICtrlRichEdit_SetReadOnly($ret,$readonly) Return $ret EndFunc Func _znilTailAboutBox() #Region ### START Koda GUI section ### Form=C:\_AutoIt\tail\znilTail-AboutBox.kxf $AboutForm = GUICreate("About znilTail", 326, 244, 726, 446, BitOR($GUI_SS_DEFAULT_GUI,$DS_SETFOREGROUND), BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE)) GUISetFont(8, 400, 0, "Courier New") $AboutGroupBoxFreeware = GUICtrlCreateGroup("", 8, 8, 305, 81, BitOR($GUI_SS_DEFAULT_GROUP,$BS_FLAT)) $AboutLabelFreeware1 = GUICtrlCreateLabel("This Tool is FREEWARE!", 9, 16, 302, 35, BitOR($SS_CENTER,$SS_CENTERIMAGE)) GUICtrlSetFont(-1, 16, 800, 0, "Courier New") $AboutLabelFreeware2 = GUICtrlCreateLabel("Copy it, give it away,", 9, 48, 302, 18, $SS_CENTER) GUICtrlSetFont(-1, 10, 400, 0, "Courier New") $AboutLabelFreeware3 = GUICtrlCreateLabel("give it to others who need it!", 9, 64, 302, 20, $SS_CENTER) GUICtrlSetFont(-1, 10, 400, 0, "Courier New") GUICtrlCreateGroup("", -99, -99, 1, 1) $AboutButtonOK = GUICtrlCreateButton("&OK", 238, 208, 75, 25, 0) GUICtrlSetFont(-1, 12, 400, 0, "Courier New") $AboutLabelWeblink = GUICtrlCreateLabel("http://znil.net", 9, 212, 222, 20) GUICtrlSetFont(-1, 10, 400, 4, "Courier New") GUICtrlSetColor(-1, 0x0000FF) GUICtrlSetCursor (-1, 0) $AboutGroupboxCommandline = GUICtrlCreateGroup(" Commandline Call: ", 8, 160, 305, 41, BitOR($GUI_SS_DEFAULT_GROUP,$BS_FLAT)) $AboutLabelCommandline = GUICtrlCreateLabel("znilTail.exe [Path+Filename-to-Tail]", 12, 176, 299, 18) GUICtrlSetFont(-1, 10, 800, 0, "Courier New") GUICtrlCreateGroup("", -99, -99, 1, 1) $AboutLabelAuthor = GUICtrlCreateLabel("2013/2014 by Bernhard Linz", 8, 96, 305, 18) GUICtrlSetFont(-1, 10, 400, 0, "Courier New") $AboutLabelVersion = GUICtrlCreateLabel("Version: ", 8, 116, 305, 18) GUICtrlSetFont(-1, 10, 400, 0, "Courier New") $AboutLabelContact = GUICtrlCreateLabel("Contact: Bernhard@znil.de", 8, 136, 305, 18) GUICtrlSetFont(-1, 10, 400, 0, "Courier New") GUICtrlSetCursor (-1, 0) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### $bAboutFormExit = False GUISetOnEvent($GUI_EVENT_CLOSE, "_CLOSEAboutForm", $AboutForm) GUICtrlSetOnEvent($AboutButtonOK, "_CLOSEAboutForm") GUICtrlSetOnEvent($AboutLabelContact, "_AboutLabelContact") GUICtrlSetOnEvent($AboutLabelWeblink, "_AboutLabelWeblink") GUICtrlSetData($AboutLabelVersion, "Version: " & FileGetVersion(@ScriptFullPath)) $aWndPosAboutForm = WinGetPos($AboutForm) WinMove($AboutForm, "About znilTail", (@DesktopWidth - $aWndPosAboutForm[2]) / 2, (@DesktopHeight - $aWndPosAboutForm[3]) / 2, $aWndPosAboutForm[2], $aWndPosAboutForm[3]) ;~ While $bAboutFormExit = False ;~ Sleep(100) ;~ WEnd ;~ Return EndFunc Func _CLOSEAboutForm() GUISetState(@SW_HIDE,$AboutForm) GUIDelete($AboutForm) $bAboutFormExit = True EndFunc Func _AboutLabelContact() _INetMail("Bernhard@znil.de", "- znilTail.exe - " & FileGetVersion(@ScriptFullPath), "") EndFunc Func _AboutLabelWeblink() ShellExecute ("http://znil.net") EndFunc ; ##################################################################################################################### Func _SetDebugLevelandRestartAgent($idebuglevel) Local $aLinesInFile Local $i Local $bFoundLine = False Local $hConfigFile Local $oShell _FileReadToArrayLocal($zabbixAgentConfigFile, $aLinesInFile) For $i = 1 To $aLinesInFile[0] If StringInStr($aLinesInFile[$i],"DebugLevel") > 0 And StringInStr($aLinesInFile[$i],"#") = 0 Then If $bFoundLine = False Then $aLinesInFile[$i] = "DebugLevel=" & $idebuglevel $bFoundLine = True Else ;ok we found it more than one time, set the other ones to a comment $aLinesInFile[$i] = "#" & $aLinesInFile[$i] EndIf EndIf Next $hConfigFile = FileOpen($zabbixAgentConfigFile, 2) For $i = 1 To $aLinesInFile[0] FileWriteLine($hConfigFile, $aLinesInFile[$i]) Next If $bFoundLine = False Then ;ok, we did not found the value, so we add him as last Entry FileWriteLine($hConfigFile, "DebugLevel=" & $idebuglevel) EndIf FileClose($hConfigFile) ; File is rewritten, so restart the servcie $i = Run(@ComSpec & ' /c net stop "' & $zabbixAgentName & '"', "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) $iTimer = TimerInit() While ProcessExists("zabbix_agentd.exe") > 0 Sleep(100) If TimerDiff($iTimer) > 10000 Then ExitLoop EndIf WEnd ;Sleep(2000) $i = Run(@ComSpec & ' /c net start "' & $zabbixAgentName & '"', "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) EndFunc ; ==>_SetDebugLevelandRestartAgent ; ##################################################################################################################### Func _GetDebugLevel() Local $aLinesInFile Local $i Local $bFoundLine = False Local $hConfigFile Local $oShell Local $iReturnValue _FileReadToArrayLocal($zabbixAgentConfigFile, $aLinesInFile) For $i = 1 To $aLinesInFile[0] If StringInStr($aLinesInFile[$i],"DebugLevel") > 0 And StringInStr($aLinesInFile[$i],"#") = 0 Then If $bFoundLine = False Then $iReturnValue = StringReplace($aLinesInFile[$i],"DebugLevel=","") $iReturnValue = StringReplace($aLinesInFile[$i]," ","") $bFoundLine = True EndIf EndIf Next If $bFoundLine = False Then $iReturnValue = 3 EndIf Return $iReturnValue EndFunc ; ==>_SetDebugLevelandRestartAgent ; ##################################################################################################################### Func _TailFile() Local $atemp Local $sSearchStringHighlight Local $sSearchStringHide Local $i Local $WhoHasFocus = ControlGetHandle($Form_znilTail, '', ControlGetFocus($Form_znilTail)) Local $sLabelStatus Local $Size ;~ _WinAPI_RedrawWindow($Form_znilTail) _GUICtrlRichEdit_PauseRedraw($EditTailText) ;~ If $sFile Then ;~ $iTailPos = 0 ;~ EndIf ; Schritt 1: Datei öffnen, die 256 steht für "UTF8 without BOM" Format, in dem Format schreibt auch der zabbix_agentd seine Log Datei ;~ $iFileSizeNow = FileGetSize($sTailFileName) Local $hTailFile = FileOpen($sTailFileName, 256) If $hTailFile = -1 Then ; Hat das Öffnen nicht geklappt! MsgBox(0,"","Konnte nicht öffnen!") Return EndIf ; Wir gehen an das Ende der Datei FileSetPos($hTailFile, 0, 2) ; Jetzt lesen wir diese Position aus, ergibt die Länge der Datei $Size = FileGetPos($hTailFile) ; $iTailPos ist die Leseposition innerhalb der Datei. ; Ist TailPos = 0 dann haben wir noch gar nichts gelesen If $iTailPos = 0 Then ; Jetzt schauen wir ob die Größe kleiner als $nBytes ist. $nBytes ist die Menge an Bytes die wir sonst initial einlesen ; Ist oben mit 1024 Bytes definiert = 1KByte If $Size > $nBytes Then ; Die Datei ist größer als 1024 Bytes. Also ziehen wir vom Ende/der Größe der Datei 1024 Bytes ab und fangen dort an zu lesen $iTailPos = $Size - $nBytes EndIf ; Kein Else! Ist die Datei kleiner als 1024 Bytes fangen wir bei 0 an zu lesen EndIf ; Falls die Größer kleiner ist als unserer Lese-Position (kann passieren bei einem Logrotate) springen wir wieder an den Anfang der Datei If $Size < $iTailPos Then ;~ $iTailPos = $Size $iTailPos = 0 EndIf ; Wenn $Size größer als unsere letzte Leseposition ist, gibt es etwas zum einlesen! If $Size > $iTailPos Then ; Wir springen an die letzte Leseposition FileSetPos($hTailFile, $iTailPos, 0) ; Wir lesen alles bis zum Ende ein, dafür steht die -1 $TailNew = FileRead($hTailFile, -1) ; Wir ermitteln wieder die Position in der Datei - müsste wieder das Ende sein $iTailPos = FileGetPos($hTailFile) ; Dann machen wir die Datei zu FileClose($hTailFile) Else ; Es gibt nichts einzulesen - also raus aus der Funktion FileClose($hTailFile) $sLabelStatus = GUICtrlRead($LabelStatus) If StringLen($sLabelStatus) < 96 Then $sLabelStatus = $sLabelStatus & "-" Else $sLabelStatus = "-" EndIf GUICtrlSetData($LabelStatus, $sLabelStatus) Return EndIf _WinAPI_SetFocus($WhoHasFocus) ; Testen wir ob wir etwas eingelesen haben If StringLen($TailNew) > 0 Then ; _Tail_Content(True, $TailNew) hab nie verstanden wofür diese Funktion ist ... $sLabelStatus = GUICtrlRead($LabelStatus) If StringLen($sLabelStatus) < 96 Then $sLabelStatus = $sLabelStatus & "#" Else $sLabelStatus = "#" EndIf GUICtrlSetData($LabelStatus, $sLabelStatus) $iTextLength = $iTextLength + StringLen($TailNew) If $bUseColorize = True Or $bHideText = True Then $atemp = StringSplit($TailNew, @CRLF) $sSearchStringHighlight = GUICtrlRead($InputHighlightText) $sSearchStringHide = GUICtrlRead($InputHidetext) ;ConsoleWrite($sSearchString & @CRLF) $TailNew = "" _WinAPI_SetFocus($WhoHasFocus) For $i = 1 To $atemp[0] If $bHideText = True Then If StringInStr($atemp[$i], $sSearchStringHide) > 1 Then $atemp[$i] = "" EndIf _WinAPI_SetFocus($WhoHasFocus) EndIf If StringInStr($atemp[$i], $sSearchStringHighlight) > 1 Then ;$TailNew = $TailNew & "[b][c=#FF0000]" & $atemp[$i] & "[/b][/c]" & @CRLF _ChatBoxAdd($EditTailText, "[b][c=#CC0000]" & $atemp[$i] & "[/b][/c]" & @CRLF) ;_GUICtrlRichEdit_SetSel($EditTailText, _GUICtrlRichEdit_GetTextLength($EditTailText) - StringLen($atemp[$i]), -1) ;_GUICtrlRichEdit_SetCharBkColor($EditTailText, 0x00FF00) ;_GUICtrlRichEdit_SetCharBkColor($EditTailText, 0xFFFFFF) Else If $atemp[$i] <> @CRLF And $atemp[$i] <> "" Then _ChatBoxAdd($EditTailText, "[c=#666666]" & $atemp[$i] & "[/c]" & @CRLF) EndIf EndIf _WinAPI_SetFocus($WhoHasFocus) Next Else _ChatBoxAdd($EditTailText, $TailNew) _WinAPI_SetFocus($WhoHasFocus) EndIf _GUICtrlRichEdit_SetSel($EditTailText, 0, -1) ; go to begin of text _GUICtrlRichEdit_SetFont($EditTailText, $iFontsize, "Lucida Console") _GUICtrlRichEdit_SetSel($EditTailText, -1, -1) ; go to end of text ;ConsoleWrite(StringLen($TailNew) & @CRLF) EndIf _WinAPI_SetFocus($WhoHasFocus) GUICtrlSetData($LabelCounter, StringRegExpReplace(_StringReverse(StringRegExpReplace(_StringReverse($iTextLength),"\d{3}","\0.")),"(? ($iRichEditTextLimit - 524288) Then _GUICtrlRichEdit_SetText($EditTailText, StringRight(_GUICtrlRichEdit_GetText($EditTailText, False, 1200), 524288)) EndIf _GUICtrlRichEdit_ResumeRedraw($EditTailText) _WinAPI_RedrawWindow($Form_znilTail) EndFunc ;==>_TailFile ; ##################################################################################################################### ;~ Func _Tail_Content($bSet = False, $sNew = "") ;~ Local Static $Tail = "" ;~ If $bSet Then $Tail = $sNew ;~ Return $Tail ;~ EndFunc ; ##################################################################################################################### Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam) Local $aWndPos = WinGetPos($Form_znilTail) Local $iWidth = _WinAPI_LoWord($lParam) Local $iHeight = _WinAPI_HiWord($lParam) If $iWidth < 991 Then $iWidth = 995 WinMove($Form_znilTail, $sFormTitle, $aWndPos[0], $aWndPos[1], $iWidth, $iHeight) Else ;nix zu tun EndIf If $iHeight < 300 Then $iHeight = 350 WinMove($Form_znilTail, $sFormTitle, $aWndPos[0], $aWndPos[1], $iWidth, $iHeight) EndIf _WinAPI_MoveWindow($EditTailText, 0, 38, $iWidth - 2, $iHeight - 120) GUICtrlSetPos($CheckboxHighlight, 5, $iHeight - 79) GUICtrlSetPos($InputHighlightText, 24, $iHeight - 77, $iWidth - 29) GUICtrlSetPos($CheckboxHideText, 5, $iHeight - 50) GUICtrlSetPos($InputHidetext, 24, $iHeight - 48, $iWidth - 29) GUICtrlSetPos($ButtonOpen, $iWidth - 85, 4, 81, 30) GUICtrlSetPos($LabelCounter, $iWidth - 217, 4, 123, 30) GUICtrlSetPos($ButtonHelp, $iWidth - 257, 4, 33, 30) GUICtrlSetPos($LabelStatus, 0, $iHeight - 20, $iWidth - 1, 19) Return 0 EndFunc ;==>WM_SIZE ; #FUNCTION# ==================================================================================================================== ; Name...........: _StringReverse ; Description ...: Reverses the contents of the specified string. ; Syntax.........: _StringReverse($s_String) ; Parameters ....: $s_String - String to reverse ; Return values .: Success - Returns reversed string ; Failure - Returns an empty string and sets @error = 1 ; |@Error - 0 = No error. ; |@Error - 1 = One of the parameters is invalid ; |@Error - 2 = Dll error ; Author ........: Jon ; Modified.......: SmOke_N (Re-written using msvcrt.dll for speed) ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _StringReverse($s_String) Local $i_len = StringLen($s_String) If $i_len < 1 Then Return SetError(1, 0, "") Local $t_chars = DllStructCreate("char[" & $i_len + 1 & "]") DllStructSetData($t_chars, 1, $s_String) Local $a_rev = DllCall("msvcrt.dll", "ptr:cdecl", "_strrev", "struct*", $t_chars) If @error Or $a_rev[0] = 0 Then Return SetError(2, 0, "") Return DllStructGetData($t_chars, 1) EndFunc ;==>_StringReverse ; #FUNCTION# ==================================================================================================================== ; Name...........: _FileReadToArrayLocal ; Description ...: Reads the specified file into an array. ; Syntax.........: _FileReadToArrayLocal($sFilePath, ByRef $aArray) ; Parameters ....: $sFilePath - Path and filename of the file to be read. ; $aArray - The array to store the contents of the file. ; Return values .: Success - Returns a 1 ; Failure - Returns a 0 ; @Error - 0 = No error. ; |1 = Error opening specified file ; |2 = Unable to Split the file ; Author ........: Jonathan Bennett , Valik - Support Windows Unix and Mac line separator ; Modified.......: Jpm - fixed empty line at the end, Gary Fixed file contains only 1 line. ; Remarks .......: $aArray[0] will contain the number of records read into the array. ; Related .......: _FileWriteFromArray ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _FileReadToArrayLocal($sFilePath, ByRef $aArray) Local $hFile = FileOpen($sFilePath, $FO_READ) If $hFile = -1 Then Return SetError(1, 0, 0);; unable to open the file ;; Read the file and remove any trailing white spaces Local $aFile = FileRead($hFile, FileGetSize($sFilePath)) ;~ $aFile = StringStripWS($aFile, 2) ; remove last line separator if any at the end of the file If StringRight($aFile, 1) = @LF Then $aFile = StringTrimRight($aFile, 1) If StringRight($aFile, 1) = @CR Then $aFile = StringTrimRight($aFile, 1) FileClose($hFile) If StringInStr($aFile, @LF) Then $aArray = StringSplit(StringStripCR($aFile), @LF) ElseIf StringInStr($aFile, @CR) Then ;; @LF does not exist so split on the @CR $aArray = StringSplit($aFile, @CR) Else ;; unable to split the file If StringLen($aFile) Then Dim $aArray[2] = [1, $aFile] Else Return SetError(2, 0, 0) EndIf EndIf Return 1 EndFunc ;==>_FileReadToArrayLocal ; ------------------------------------------------------------------------------------------ Func _CLOSEznilTail() _WinAPI_SetFocus($hControl) _ChatBoxDestroy($EditTailText) AdlibUnRegister("_TailFile") GUIDelete($Form_znilTail) Sleep(250) Exit 0 EndFunc ; ------------------------------------------------------------------------------------------ ; -------------------------------------------------------------------------------------------------------- Func _ButtonOpen() $sTailFileName = FileOpenDialog("Open File for Tail", @ScriptDir, "Textfiles (*.*)", 3, "", $Form_znilTail) If $sTailFileName = "" Or @error = 1 Then $sTailFileName = "" $sFormTitle = "znilTail: No File selected" Else $sFormTitle = "znilTail: " & $sTailFileName EndIf _WinAPI_SetWindowText($Form_znilTail, $sFormTitle) _WinAPI_SetFocus($hControl) ; nach dem Öffnen auch gleich loslegen! $iTailPos = 0 _ButtonStart() EndFunc Func _ButtonStart() If $sTailFileName <> "" Then AdlibRegister("_TailFile", $iRefreshrate) GUICtrlSetState($ButtonStart, $GUI_DISABLE) GUICtrlSetState($ButtonStop, $GUI_ENABLE) GUICtrlSetState($ButtonOpen, $GUI_DISABLE) Else MsgBox(262192,"znilTail: No file selected","You need to open a File first!",5) EndIf _WinAPI_SetFocus($hControl) EndFunc Func _ButtonStop() AdlibUnRegister("_TailFile") GUICtrlSetState($ButtonStart, $GUI_ENABLE) GUICtrlSetState($ButtonOpen, $GUI_ENABLE) GUICtrlSetState($ButtonStop, $GUI_DISABLE) _WinAPI_SetFocus($hControl) EndFunc Func _ButtonFontMinus() If $iFontsize > 6 Then $iFontsize = $iFontsize - 1 _GUICtrlRichEdit_SetSel($EditTailText, 0, -1) ; go to begin of text _GUICtrlRichEdit_SetFont($EditTailText, $iFontsize, "Lucida Console") _GUICtrlRichEdit_SetSel($EditTailText, -1, -1) ; go to end of text EndIf _WinAPI_SetFocus($hControl) EndFunc Func _ButtonFontPlus() $iFontsize = $iFontsize + 1 _GUICtrlRichEdit_SetSel($EditTailText, 0, -1) ; go to begin of text _GUICtrlRichEdit_SetFont($EditTailText, $iFontsize, "Lucida Console") _GUICtrlRichEdit_SetSel($EditTailText, -1, -1) ; go to end of text _WinAPI_SetFocus($hControl) EndFunc Func _ButtonHelp() ;~ MsgBox(0,"","ButtonHelp!") _znilTailAboutBox() _WinAPI_SetFocus($hControl) EndFunc Func _ButtonDebugLevel3() $iCurrentDebugLevel = 3 _WinAPI_SetFocus($hControl) GUICtrlSetState($ButtonDebugLevel3, $GUI_DISABLE) GUICtrlSetData($ButtonDebugLevel3, "Debug Level 3 is active") GUICtrlSetState($ButtonDebugLevel4, $GUI_ENABLE) GUICtrlSetData($ButtonDebugLevel4, "Restart Zabbix Agent with DebugLevel 4") _SetDebugLevelandRestartAgent($iCurrentDebugLevel) EndFunc Func _ButtonDebugLevel4() $iCurrentDebugLevel = 4 _WinAPI_SetFocus($hControl) GUICtrlSetState($ButtonDebugLevel4, $GUI_DISABLE) GUICtrlSetData($ButtonDebugLevel4, "Debug Level 4 is active") GUICtrlSetState($ButtonDebugLevel3, $GUI_ENABLE) GUICtrlSetData($ButtonDebugLevel3, "Restart Zabbix Agent with DebugLevel 3") _SetDebugLevelandRestartAgent($iCurrentDebugLevel) EndFunc Func _ButtonRestartAgent() _WinAPI_SetFocus($hControl) ;~ $i = Run(@ComSpec & ' /c net stop "' & $zabbixAgentName & '"', "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) ;~ MsgBox(0,"",@ComSpec & ' /c net stop "' & $zabbixAgentName & '"') GUICtrlSetData($LabelStatus, GUICtrlRead($LabelStatus) & " stopping zabbbix_agentd.exe ... ") ;~ SplashTextOn("Restart Zabbix Agent", "Zabbix Agent wird beendet ...", 400, 38, -1 ,-1, 0, "Lucida Console", 14) $i = Run(@ComSpec & ' /c net stop "' & $zabbixAgentName & '"', "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) $iTimer = TimerInit() While ProcessExists("zabbix_agentd.exe") > 0 Sleep(100) If TimerDiff($iTimer) > 10000 Then ExitLoop EndIf WEnd ;Sleep(2000) ;~ SplashOff() ;~ SplashTextOn("Restart Zabbix Agent", "Zabbix Agent wird gestartet ...", 400, 38, -1 ,-1, 0, "Lucida Console", 14) $i = Run(@ComSpec & ' /c net start "' & $zabbixAgentName & '"', "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) ;~ _TailFile() GUICtrlSetData($LabelStatus, GUICtrlRead($LabelStatus) & " starting zabbbix_agentd.exe ... ") Sleep(1000) ;~ SplashOff() EndFunc Func _GUI_HideShow() _WinAPI_SetFocus($hControl) GUISetState(@SW_HIDE,$Form_znilTail) ;Hide GUI GUISetState(@SW_SHOW,$Form_znilTail) ;Show GUI EndFunc Func _CheckboxHighlight() If GUICtrlRead($CheckboxHighlight) = $GUI_CHECKED Then $bUseColorize = True Else $bUseColorize = False EndIf EndFunc Func _CheckboxHideText() If GUICtrlRead($CheckboxHideText) = $GUI_CHECKED Then $bHideText = True Else $bHideText = False EndIf EndFunc ; -------------------------------------------------------------------------------------------------------- #Region ### START Koda GUI section ### Form=c:\_autoit\tail\zniltail-v2.kxf $Form_znilTail = GUICreate("znilTail: zabbix_agentd.log", 991, 497, 488, 278, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP)) GUISetBkColor(0x000000) $EditTailText = GUICtrlCreateEdit("", 0, 38, 983, 377, BitOR($GUI_SS_DEFAULT_EDIT,$WS_CLIPSIBLINGS)) GUICtrlSetData(-1, "Edit1") GUICtrlSetFont(-1, 10, 400, 0, "Lucida Console") GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM) $ButtonOpen = GUICtrlCreateButton("Open File", 900, 4, 81, 30) GUICtrlSetFont(-1, 8, 400, 0, "Lucida Console") GUICtrlSetResizing(-1, $GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) GUICtrlSetTip(-1, "Open another Textfile for tailing") $ButtonStart = GUICtrlCreateButton("START", 2, 4, 81, 30) GUICtrlSetFont(-1, 12, 800, 0, "Lucida Console") GUICtrlSetColor(-1, 0x008000) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) GUICtrlSetTip(-1, "START tailing the file.") $ButtonStop = GUICtrlCreateButton("STOP", 88, 4, 81, 30) GUICtrlSetFont(-1, 12, 800, 0, "Lucida Console") GUICtrlSetColor(-1, 0xFF0000) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) GUICtrlSetState(-1, $GUI_DISABLE) GUICtrlSetTip(-1, "STOP tailing!") $CheckboxHighlight = GUICtrlCreateCheckbox("", 5, 418, 17, 25) GUICtrlSetResizing(-1, $GUI_DOCKAUTO+$GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) $InputHighlightText = GUICtrlCreateInput("Highlight Lines with this Text", 24, 420, 958, 20) GUICtrlSetFont(-1, 9, 800, 0, "Lucida Console") GUICtrlSetBkColor(-1, 0xC0DCC0) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT) $ButtonFontPlus = GUICtrlCreateButton("+", 192, 4, 33, 30) GUICtrlSetFont(-1, 20, 800, 0, "Courier New") GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) GUICtrlSetTip(-1, "make Font bigger") $ButtonFontMinus = GUICtrlCreateButton("-", 232, 4, 33, 30) GUICtrlSetFont(-1, 20, 800, 0, "Courier New") GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) GUICtrlSetTip(-1, "make Font smaler") $CheckboxHideText = GUICtrlCreateCheckbox("", 5, 447, 17, 25) GUICtrlSetResizing(-1, $GUI_DOCKAUTO+$GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) $InputHidetext = GUICtrlCreateInput("Hide Lines with this Text", 24, 449, 958, 20) GUICtrlSetFont(-1, 9, 800, 0, "Lucida Console") GUICtrlSetColor(-1, 0xFFFF00) GUICtrlSetBkColor(-1, 0xFF0000) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT) $LabelCounter = GUICtrlCreateLabel("LabelCounter", 768, 4, 123, 30, BitOR($SS_CENTER,$SS_CENTERIMAGE,$SS_SUNKEN)) GUICtrlSetFont(-1, 10, 800, 0, "Lucida Console") GUICtrlSetColor(-1, 0xFFFFFF) GUICtrlSetBkColor(-1, 0x000080) GUICtrlSetResizing(-1, $GUI_DOCKRIGHT+$GUI_DOCKTOP) GUICtrlSetTip(-1, "Number of Bytes that have been read since start.") $ButtonHelp = GUICtrlCreateButton("?", 728, 4, 33, 30) GUICtrlSetFont(-1, 18, 800, 0, "Lucida Console") GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) GUICtrlSetTip(-1, "About Box with link to Homepage") $ButtonDebugLevel3 = GUICtrlCreateButton("Restart Zabbix Agent with DebugLevel=3", 292, 4, 153, 30, $BS_MULTILINE) GUICtrlSetFont(-1, 8, 400, 0, "Lucida Console") GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) GUICtrlSetTip(-1, "Change the DebugLevel of Zabbix Agent to 3 (Warnings) and restart the Agent. If this Button ist greyed Out you need to start znilTail.exe with Adminisrator-Rights. If no Zabbix Agent was found this Button will not shown.") $ButtonDebugLevel4 = GUICtrlCreateButton("Restart Zabbix Agent with DebugLevel=4", 452, 4, 153, 30, $BS_MULTILINE) GUICtrlSetFont(-1, 8, 400, 0, "Lucida Console") GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) GUICtrlSetTip(-1, "Change the DebugLevel of Zabbix Agent to 3 (Debugging) and restart the Agent. If this Button ist greyed Out you need to start znilTail.exe with Adminisrator-Rights. If no Zabbix Agent was found this Button will not shown.") $ButtonRestartAgent = GUICtrlCreateButton("Restart Zabbix Agent", 610, 4, 113, 30, $BS_MULTILINE) GUICtrlSetFont(-1, 8, 400, 0, "Lucida Console") GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) GUICtrlSetTip(-1, "Just Restart the Zabbix Agent (without changing DebugLevel)") $LabelStatus = GUICtrlCreateLabel("LabelStatus", 0, 477, 990, 19, $WS_BORDER) GUICtrlSetFont(-1, 12, 400, 0, "Lucida Console") GUICtrlSetBkColor(-1, 0xC0C0C0) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### #Region ------ StartUp ------------------------------ GUIRegisterMsg($WM_SIZE, "WM_SIZE") GUISetOnEvent($GUI_EVENT_RESIZED, "_GUI_HideShow", $Form_znilTail) GUISetOnEvent($GUI_EVENT_MAXIMIZE, "_GUI_HideShow", $Form_znilTail) GUISetOnEvent($GUI_EVENT_RESTORE, "_GUI_HideShow", $Form_znilTail) GUISetOnEvent($GUI_EVENT_CLOSE, "_CLOSEznilTail", $Form_znilTail) If GUICtrlSetOnEvent($ButtonOpen, "_ButtonOpen") = 0 Then MsgBox(0,"","Fehler _ButtonOpen") If GUICtrlSetOnEvent($ButtonStart, "_ButtonStart") = 0 Then MsgBox(0,"","Fehler _ButtonStart") If GUICtrlSetOnEvent($ButtonStop, "_ButtonStop") = 0 Then MsgBox(0,"","Fehler _ButtonStop") If GUICtrlSetOnEvent($ButtonFontMinus, "_ButtonFontMinus") = 0 Then MsgBox(0,"","Fehler _ButtonFontMinus") If GUICtrlSetOnEvent($ButtonFontPlus, "_ButtonFontPlus") = 0 Then MsgBox(0,"","Fehler _ButtonFontPlus") If GUICtrlSetOnEvent($ButtonHelp, "_ButtonHelp") = 0 Then MsgBox(0,"","Fehler _ButtonHelp") If GUICtrlSetOnEvent($ButtonDebugLevel3, "_ButtonDebugLevel3") = 0 Then MsgBox(0,"","Fehler _ButtonDebugLevel3") If GUICtrlSetOnEvent($ButtonDebugLevel4, "_ButtonDebugLevel4") = 0 Then MsgBox(0,"","Fehler _ButtonDebugLevel4") If GUICtrlSetOnEvent($ButtonRestartAgent, "_ButtonRestartAgent") = 0 Then MsgBox(0,"","Fehler _ButtonRestartAgent") If GUICtrlSetOnEvent($CheckboxHighlight, "_CheckboxHighlight") = 0 Then MsgBox(0,"","Fehler _CheckbosHighlight") If GUICtrlSetOnEvent($CheckboxHideText, "_CheckboxHideText") = 0 Then MsgBox(0,"","Fehler _CheckboxHideText") GUICtrlSetData($LabelStatus,"") GUICtrlDelete($EditTailText) $EditTailText = _TailBoxCreate($Form_znilTail,"",0, 38, 983, 377,"0xFFFFFF", True, False, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL, $WS_CLIPSIBLINGS)) _GUICtrlRichEdit_SetFont($EditTailText, $iFontsize, "Courier New") _GUICtrlRichEdit_SetLimitOnText($EditTailText, $iRichEditTextLimit) _WinAPI_SetWindowText($Form_znilTail, $sFormTitle) GUICtrlSetData($LabelCounter, 0) GUICtrlSetTip($ButtonDebugLevel3, "Change the DebugLevel of Zabbix Agent to 3 (Warnings) and restart the Agent." & @CRLF & _ "If this Button ist greyed out you need to start znilTail.exe with Adminisrator-Rights.") GUICtrlSetTip($ButtonDebugLevel4, "Change the DebugLevel of Zabbix Agent to 3 (Debugging) and restart the Agent." & @CRLF & _ "If this Button ist greyed Out you need to start znilTail.exe with Adminisrator-Rights.") ;~ $data="[s]Hallo,[/s] [b][i]wie[/i] [u]gehts[/u]?[/b]"&@CRLF& _ ;~ "[c=#00FF00]Grün"&@CRLF&"![/c]"&@CRLF& _ ;~ "[c=#00FF00]Moinsen,[/c] schwarz"&@CRLF& _ ;~ "[c=#FF0000]Moinsen,[/c] schwarz"&@CRLF ;~ _ChatBoxAdd($EditTailText,$data) GUISetState(@SW_SHOW, $Form_znilTail) $aWndPos = WinGetPos($Form_znilTail) WinMove($Form_znilTail, $sFormTitle, (@DesktopWidth - $aWndPos[2]) / 2, (@DesktopHeight - $aWndPos[3]) / 2, $aWndPos[2], $aWndPos[3]) ; Were we startet with Commandline Parameter? ######################################################################### If $CmdLine[0] > 0 Then $sTailFileName = $CmdLine[1] If FileExists($sTailFileName) = 0 Then MsgBox(262144,"znilTail: File not found!","znilTail.exe was startet with a File as Commandline Parameter:" & @CRLF & _ @CRLF & $sTailFileName & @CRLF & @CRLF & "but the File did not exist!",10) Else ;~ AdlibRegister("_TailFile", 250) ;~ GUICtrlSetState($ButtonStart, $GUI_DISABLE) ;~ GUICtrlSetState($ButtonStop, $GUI_ENABLE) ;~ GUICtrlSetState($ButtonOpen, $GUI_DISABLE) ;~ $sFormTitle = "znilTail: " & $sTailFileName ;~ _WinAPI_SetWindowText($Form_znilTail, $sFormTitle) _ButtonStart() EndIf EndIf ; Is Zabbix the Zabbix Agent installed on this Computer? If yes: Name of Service and Path+Filename of his Config-File? $sRegSubKey = RegRead($aRegistryBaseServicePaths[0] & "Control", "CurrentUser") If $sRegSubKey = "" Then $sRegSubKey = RegRead($aRegistryBaseServicePaths[1] & "Control", "CurrentUser") If $sRegSubKey = "" Then $sRegSubKey = RegRead($aRegistryBaseServicePaths[2] & "Control", "CurrentUser") If $sRegSubKey = "" Then $iRightRegistryPath = 99 Else $iRightRegistryPath = 2 EndIf Else $iRightRegistryPath = 1 EndIf Else $iRightRegistryPath = 0 EndIf $i = 0 $zabbixAgentName = "" $zabbixAgentConfigFile = "" While 1 $i = $i + 1 $sRegSubKey = RegEnumKey($aRegistryBaseServicePaths[$iRightRegistryPath] & "services", $i) If @error <> 0 Then ExitLoop If StringLeft($sRegSubKey,StringLen("Zabbix Agent")) = "Zabbix Agent" Then $zabbixAgentName = RegRead($aRegistryBaseServicePaths[$iRightRegistryPath] & "services\" & $sRegSubKey, "DisplayName") $zabbixAgentConfigFile = RegRead($aRegistryBaseServicePaths[$iRightRegistryPath] & "services\" & $sRegSubKey, "ImagePath") ;"C:\Program Files\Zabbix\zabbix_agentd.exe" --config "c:\Program Files\Zabbix\zabbix_agentd.win.conf" -m $zabbixAgentConfigFile = StringRegExpReplace($zabbixAgentConfigFile, '.*(?i)--config "', "") $zabbixAgentConfigFile = StringRegExpReplace($zabbixAgentConfigFile, '".*', "") ExitLoop EndIf WEnd If $zabbixAgentConfigFile <> "" And FileExists($zabbixAgentConfigFile) = 1 Then $bShowZabbixAgentButtons = True Else $bShowZabbixAgentButtons = False EndIf If IsAdmin() = 1 Then $bAdminrights = True ;MsgBox(0,"","Admin Rechte!") Else $bAdminrights = False ;MsgBox(0,"","Du darfst nichts") EndIf ;MsgBox(0,"$zabbixAgentConfigFile",$zabbixAgentConfigFile) If StringLen($zabbixAgentConfigFile) > 0 And $bAdminrights = False Then GUICtrlSetState($ButtonDebugLevel3, $GUI_DISABLE) GUICtrlSetState($ButtonDebugLevel4, $GUI_DISABLE) EndIf ;~ If $bAdminrights = True Then ;~ MsgBox(0,"","Adminrechte!") ;~ Else ;~ MsgBox(0,"","Keine Rechte") ;~ EndIf If StringLen($zabbixAgentConfigFile) > 0 Then If IsAdmin() = 1 Then $hzabbixAgentConfigFile = FileOpen($zabbixAgentConfigFile, 0) While 1 $stemp = FileReadLine($hzabbixAgentConfigFile) If @error = -1 Then ExitLoop If StringInStr($stemp,"DebugLevel") > 0 And StringInStr($stemp,"#") = 0 Then $iCurrentDebugLevel = Int(StringRegExpReplace($stemp,"[.\s]*[^0-9]", "")) ;MsgBox(0,"DebugLevel",$iCurrentDebugLevel) ExitLoop EndIf WEnd FileClose($hzabbixAgentConfigFile) EndIf EndIf ;MsgBox(0,"$iCurrentDebugLevel",$iCurrentDebugLevel) If $iCurrentDebugLevel = 3 Then GUICtrlSetState($ButtonDebugLevel3, $GUI_DISABLE) GUICtrlSetData($ButtonDebugLevel3, "Debug Level 3 is active") GUICtrlSetState($ButtonDebugLevel4, $GUI_ENABLE) GUICtrlSetData($ButtonDebugLevel4, "Restart Zabbix Agent with DebugLevel 4") ElseIf $iCurrentDebugLevel = 4 Then GUICtrlSetState($ButtonDebugLevel4, $GUI_DISABLE) GUICtrlSetData($ButtonDebugLevel4, "Debug Level 4 is active") GUICtrlSetState($ButtonDebugLevel3, $GUI_ENABLE) GUICtrlSetData($ButtonDebugLevel3, "Restart Zabbix Agent with DebugLevel 3") ElseIf $iCurrentDebugLevel >= 0 And $iCurrentDebugLevel < 3 Then GUICtrlSetState($ButtonDebugLevel3, $GUI_ENABLE) GUICtrlSetData($ButtonDebugLevel3, "Restart Zabbix Agent with DebugLevel 3") GUICtrlSetState($ButtonDebugLevel4, $GUI_ENABLE) GUICtrlSetData($ButtonDebugLevel4, "Restart Zabbix Agent with DebugLevel 4") EndIf If $zabbixAgentConfigFile = "" Then GUICtrlSetTip($ButtonDebugLevel3, "Unavailable - no Zabbix Agent Service found on this Computer." & @CRLF & _ "znilTail.exe has looked for Agent in the Registry but found nothing.") GUICtrlSetData($ButtonDebugLevel3, "No installed Zabbix Agent found!") GUICtrlSetTip($ButtonDebugLevel4, "Unavailable - no Zabbix Agent Service found on this Computer." & @CRLF & _ "znilTail.exe has looked for Agent in the Registry but found nothing.") GUICtrlSetData($ButtonDebugLevel4, "No installed Zabbix Agent found!") GUICtrlSetTip($ButtonRestartAgent, "Unavailable - no Zabbix Agent Service found on this Computer." & @CRLF & _ "znilTail.exe has looked for Agent in the Registry but found nothing.") GUICtrlSetData($ButtonRestartAgent, "No Zabbix Agent found!") GUICtrlSetState($ButtonDebugLevel3, $GUI_DISABLE) GUICtrlSetState($ButtonDebugLevel4, $GUI_DISABLE) GUICtrlSetState($ButtonRestartAgent, $GUI_DISABLE) Else $iCurrentDebugLevel = _GetDebugLevel() If $iCurrentDebugLevel = 4 Then GUICtrlSetState($ButtonDebugLevel4, $GUI_DISABLE) GUICtrlSetData($ButtonDebugLevel4, "Debug Level 4 is active") GUICtrlSetState($ButtonDebugLevel3, $GUI_ENABLE) GUICtrlSetData($ButtonDebugLevel3, "Restart Zabbix Agent with DebugLevel 3") EndIf EndIf $hControl = ControlGetHandle($Form_znilTail, '', ControlGetFocus($Form_znilTail)) #EndRegion --- StartUp ------------------------------ While 1 ;~ Case $InputHighlightText ;~ If GUICtrlRead($InputHighlightText) = "Highlight Lines with this Text" Then ;~ GUICtrlSetData($InputHighlightText, "") ;~ GUICtrlSetData($CheckboxHighlight, $GUI_CHECKED) ;~ EndIf Sleep(100) If ControlGetHandle($Form_znilTail, '', $InputHighlightText) = ControlGetHandle($Form_znilTail, '', ControlGetFocus($Form_znilTail)) Then If GUICtrlRead($InputHighlightText) = "Highlight Lines with this Text" Then GUICtrlSetData($InputHighlightText, "") GUICtrlSetState($CheckboxHighlight, $GUI_CHECKED) $bUseColorize = True EndIf EndIf If ControlGetHandle($Form_znilTail, '', $InputHidetext) = ControlGetHandle($Form_znilTail, '', ControlGetFocus($Form_znilTail)) Then If GUICtrlRead($InputHidetext) = "Hide Lines with this Text" Then GUICtrlSetData($InputHidetext, "") GUICtrlSetState($CheckboxHideText, $GUI_CHECKED) $bHideText = True EndIf EndIf WEnd