Jump to content
mmoalem

monitor the code executed

Recommended Posts

mmoalem

Hi there - quite a beginner to codding so please bare with me...

i am writing an autoit code that will be running 24/7 executing various tasks every 10-20 minutes. it suppose to run on unattended server but i would like to occasionally remote log in and do stuff on the server without disturbing the autoit script (while the autoit script is in Sleep count). to achieve this I will need to know at what point in the commands run it is  and how long roughly until the next command (I use Sleep in between commands)...

 so, is there a way to create a monitor that shows me the last command executed and how long of the Sleep is left (like in a small window or in the windows task bar)?

failing that any idea how can I utilize the FileWriteLog function to keep updating an always open text file ?

 

thanks in advance

michel

Share this post


Link to post
Share on other sites
AutoBert

You can implement _FileWriteLog into your script.  So you can reading/analysing the log and saw what script done.

Share this post


Link to post
Share on other sites
mmoalem

hi and thanks for the answer... what I really would have liked is a countdown clock of a kind that will tell me how long I have before the next command/end of Sleep... but maybe its not possible within autoit...:(

so if I understand correctly I can use   _FileWriteLog  to write to an open text file (opened in notepad for example so I can read it whenever I log in)... any idea how i get it to write to the file log.txt the command about to be executed - lets says Sleep (5000) followed by the time? and than I guess I will need to save the txt file...

Share this post


Link to post
Share on other sites
AutoBert

You can use AdlibRegister to execut a func while maom script is sleeping or doing something else.

Edited by AutoBert

Share this post


Link to post
Share on other sites
InunoTaishou

Could create a small GUI with some debug info on there. I find consoles are always useful. There's also a debugging option in the AutoItSetOption parameters.

; -- Created with ISN Form Studio 2 for ISN AutoIt Studio -- ;
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>
#include <EditConstants.au3>
#include <Date.au3>

AutoItSetOption("TrayMenuMode", 3)
AutoItSetOption("TrayIconDebug", 3)

Global $hMain = GUICreate("Example", 400, 300, -1, -1, BitOR($WS_SIZEBOX, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX))
Global $edtDebug = GUICtrlCreateEdit("Initiated @ " & _NowDate() & " : " & _NowTime(5) & @CRLF, 10, 10, 380, 225, BitOR($ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL), -1)
Global $lblCurrentTimer = GUICtrlCreateLabel("Current Timer", 14, 250, 100, 20, -1, -1)
Global $lblTimer = GUICtrlCreateLabel(0, 114, 250, 100, 20, -1, -1)
Global $tidShowHide = TrayCreateItem("Show Debugger")
Global $tidExit = TrayCreateItem("Exit")

Global $iTimer = TimerInit()

GUICtrlSetFont($edtDebug, 10, 400, 0, "Consolas")
GUICtrlSetColor($edtDebug, "0xE1E1E1")
GUICtrlSetBkColor($edtDebug, "0x1E1E1E")
GUICtrlSetResizing($edtDebug, 102)
GUICtrlSetFont($lblCurrentTimer, 10, 400, 0, "Segoe UI")
GUICtrlSetBkColor($lblCurrentTimer, "-2")
GUICtrlSetResizing($lblCurrentTimer, 66)
GUICtrlSetFont($lblTimer, 10, 400, 0, "Segoe UI")
GUICtrlSetBkColor($lblTimer, "-2")
GUICtrlSetResizing($lblTimer, 66)

While (True)
    Switch (TrayGetMsg())
        Case $tidShowHide
            If (TrayItemGetText($tidShowHide) = "Show Debugger") Then
                Debug("Showing debugger" & @CRLF)
                GUISetState(@SW_SHOW, $hMain)
                TrayItemSetText($tidShowHide, "Hide Debugger")
            Else
                Debug("Hiding debugger" & @CRLF)
                GUISetState(@SW_HIDE, $hMain)
                TrayItemSetText($tidShowHide, "Show Debugger")
            EndIf
        Case $tidExit
            GUIDelete($hMain)
            Exit 0
    EndSwitch
    Switch (GUIGetMsg())
        Case $GUI_EVENT_CLOSE
            GUIDelete($hMain)
            Exit 0
        Case Else
            GUICtrlSetData($lblTimer, Round(TimerDiff($iTimer) / 1000, 2))
            If (TimerDiff($iTimer) > 30000) Then
                Debug("Timer reached max timeout, resetting" & @CRLF)
                $iTimer = TimerInit()
            EndIf
    EndSwitch
WEnd

Func Debug($sMsg)
    $sMsg = "[" & _NowDate() & "] [" & _NowTime(5) & "] " & $sMsg
    GUICtrlSetData($edtDebug, GUICtrlRead($edtDebug) & $sMsg)
EndFunc   ;==>Debug

Func FileWriteToLog(Const $sMsg)
    Local $hLogFile = FileOpen(@ScriptDir & "\My log file.log")
    If ($hLogFile) Then
        FileWrite($hLogFile, $sMsg)
        Return FileClose($hLogFile)
    EndIf
EndFunc   ;==>FileWriteToLog

 

Share this post


Link to post
Share on other sites
markyrocks
2 hours ago, mmoalem said:

hi and thanks for the answer... what I really would have liked is a countdown clock of a kind that will tell me how long I have before the next command/end of Sleep... but maybe its not possible within autoit...:(

so if I understand correctly I can use   _FileWriteLog  to write to an open text file (opened in notepad for example so I can read it whenever I log in)... any idea how i get it to write to the file log.txt the command about to be executed - lets says Sleep (5000) followed by the time? and than I guess I will need to save the txt file...

Anything is possible with autoit.  Just depends on how much time and determination you have. 

Share this post


Link to post
Share on other sites
InunoTaishou

Unfortunately not everything is possible. Native classes and multithreading :( lol

Also, change

GUICtrlSetData($lblTimer, Round(TimerDiff($iTimer) / 1000, 2))

To

GUICtrlSetData($lblTimer, 30 - Round(TimerDiff($iTimer) / 1000, 2))

And there's your countdown timer.

Edited by InunoTaishou

Share this post


Link to post
Share on other sites
alien4u

Hi @mmoalem
Is also helpful for you that you know that there is different ways to make this script run on background and you still can interact with the System without interrupting the script even if the script is doing his task.

For example if your entire script use @SW_HIDE flag on anything the script execute or run and also only use ControlSend or ControlClick then you should not be worry to connect to the remote system running the script even if the script is doing his tasks.

Kind Regards
Alien.

Share this post


Link to post
Share on other sites
Chimp

... If you just need to monitor the sleep() countdown between tasks, then  you could use this _VisualSleep() function instead of the normal Sleep()

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

_VisualSleep(90000) ; wait one minute and a half

Func _VisualSleep($iDelay, $bAllowEscape = False)
    Local $hMonitor = GUICreate("Sleeping", 200, 30, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
    Local $idProgressbar = GUICtrlCreateProgress(0, 0, 200, 30)
    GUISetState(@SW_SHOW)
    Local $iTimeElapsed, $iTimeLeft, $iPercentage, $iRefreshTime, $sHHMMSS
    Local $iTimer = TimerInit()
    Do
        Switch GUIGetMsg() ; this also save from cpu overload
            Case $GUI_EVENT_CLOSE
                If $bAllowEscape Then ; if True, reset of counter is allowed
                    ExitLoop
                EndIf
        EndSwitch
        $iTimeElapsed = TimerDiff($iTimer)
        If $iRefreshTime - $iTimeElapsed < 0 Then ; limits refresh rate to 1 second
            $iRefreshTime = $iTimeElapsed + 1000
            $iTimeLeft = ($iDelay - $iTimeElapsed) / 1000 ; in seconds
            $iPercentage = Int(100 / $iDelay * $iTimeElapsed)
            GUICtrlSetData($idProgressbar, 100 - $iPercentage) ; progressbar go backwards
            $sHHMMSS = StringFormat("%02d:%02d:%02d", Floor($iTimeLeft / 3600), Mod(Floor($iTimeLeft / 60), 60), Mod($iTimeLeft, 60))
            WinSetTitle($hMonitor, "", $sHHMMSS) ; show countdown on window title
        EndIf
    Until $iTimeElapsed >= $iDelay
    GUIDelete($hMonitor)
EndFunc   ;==>_VisualSleep

p.s. also, have a look to the ProgressOn() and related functions


small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Share this post


Link to post
Share on other sites
JohnOne

Or something much simpler...

Func _Sleep($MS)
    $Timer = TimerInit()
    While 1
        $Diff = TimerDiff($Timer)
        If $Diff >= $MS Then
            ToolTip("")
            Return
        EndIf
        ToolTip(Int(($MS - $Diff) / 1000)) ; put this somewhere static
        Sleep(1000)
    WEnd
EndFunc

 


AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Share this post


Link to post
Share on other sites
mmoalem

WOW! woke up this morning to this huge list of suggestions! thank U all...

have to admit - most of these looks way to complicated in my early stage of learnng this languege but will spend some time studying them and see if i can make one of the work for me...

Thank U once more for all the help

Share this post


Link to post
Share on other sites
Bert

another suggestion is simply have a separate exe that is the timer to handle the multi-task. I would suggest a system tray icon that changed color depending on the amount of time left. Go from green to yellow to red and have it so you can do a mouse over to check the time. 

Share this post


Link to post
Share on other sites
mmoalem

OK so managed to both understand and implement what seemed to me the simplest solution from JohnOne

15 hours ago, JohnOne said:

Or something much simpler...

Func _Sleep($MS)
    $Timer = TimerInit()
    While 1
        $Diff = TimerDiff($Timer)
        If $Diff >= $MS Then
            ToolTip("")
            Return
        EndIf
        ToolTip(Int(($MS - $Diff) / 1000)) ; put this somewhere static
        Sleep(1000)
    WEnd
EndFunc

 

Now might be a simple question but can I display the time in hours:minutes:seconds? at the moment it seems to show countdown in seconds only...

 

Share this post


Link to post
Share on other sites
mmoalem

thanks JohnOne, very kind of you to help so much...

I will look at adopting your solution from the other thread but if I may, i have another problem to solve... I would like to log every command after it is executed... I have thousand lines of code so impractical to write a FileWriteLog command after each line... is there a way to use a function at the head of the script to achieve this?

I need this because In case windows crash I need to know at what point the script been interrupted...

Share this post


Link to post
Share on other sites
mmoalem

thanks again - I knew about it but couldn't find the option in Tools until I realised now that there is a compact version and an extended version of Scite...

anyway - it does exactly what I need except for the output need to be to a file rather than console as if the server crashed I would lose the console records (I think???)...

 

also, I'm not clear how ConsoleWrite works once compiled and run independently from Scite

Share this post


Link to post
Share on other sites
markyrocks

this would be a simple way to log stuff happening

 

;somthing happened
_LogEvent("something happened")

func _LogEvent($event)
$file=fileopen("log.txt",1)
if $file=-1 then
msgbox("","","file failed to open")
endif

filewriteline($file,_Now() & $event)
fileclose($file)
endfunc

untested

Edited by markyrocks

Share this post


Link to post
Share on other sites
JohnOne
1 hour ago, mmoalem said:

thanks again - I knew about it but couldn't find the option in Tools until I realised now that there is a compact version and an extended version of Scite...

anyway - it does exactly what I need except for the output need to be to a file rather than console as if the server crashed I would lose the console records (I think???)...

 

also, I'm not clear how ConsoleWrite works once compiled and run independently from Scite

Well you user a Regex or a stringreplace on your script to Change ConsoleWrite( to _YourFunction(


AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • t0nZ
      By t0nZ
      About logs, it is a few years that I drag a couple of functions between one script and another, so finally I decided to write down my first UDF to optimize my scripts.
      Main focus is to keep it simple, so you have just to include _gollog.au3 and call:
      GOLLOG("a line of text"), and start logging.
      If your script is without GUI the log will be only written to disk, if you have a GUI you can initialize an edit control :
      GOLLOG_INI($guititle, $left, $top, $width, $height)
      and GOLLOG() will write your log both in an auto generated EDIT control in your $guititle GUI and disk; also GOLLOG_INI() will AUTO-create a GUI (if it doesn't exist $guititle) with a screen log if you want !
      The majority of options (colors, fonts, position of logs ) are default-defined, but you can initialize them with GOLLOG_INI(), is all documented in the UDF and partially in the example.
      There is also a function:
      GOLzipLOG($n)
      to ZIP logs older than $n months, based on the UDF (also included in attachments) _zip.udf by @wraithdu
      the UDF code:
      #include-once #include <File.au3> #include <_zip.au3> ; #INDEX# ======================================================================================================================= ; Title .........: GOLLOG ; AutoIt Version : 3.3.14.0++ ; Language ......: English ; Description ...: Smart logging system ; Author(s) .....: NSC ; =============================================================================================================================== ; ------------------------------------------------------------------------------ ; This software is provided 'as-is', without any express or ; implied warranty. In no event will the authors be held liable for any ; damages arising from the use of this software. ; #VARIABLES# =================================================================================================================== ; internal use Global $gollogcount = 0 ;total number of chars in editbox Global $lastlog = "sicrlf" ;carriage return default yes "sicrlf" or no onetime "nocrlf", see func GOLLOG Global $cachelog = "" ;to count number of chars on single line Global $Gollogedit = "" ;name of edit control ; to initialize with func _GOLLOG_INI Global $guititle = "" ;name of gui for checkin' if activate on screen loggin' Global $geleft = 0 ;left coord edit box Global $getop = 0 ;top coord edit box Global $gewidth = 0 ;width of edit box Global $geheight = 0 ;height of edit box ; optionally to initialize with func _GOLLOG_INI, otherwise default values used Global $GEfontcolor = "0x00FF00" Global $GEbkcolor = "0x000000" Global $GEfont = "consolas" Global $GEfontsize = 8 Global $gefontweight = 800 Global $logpath = @ScriptDir & "\logs" Global $logfile = $logpath & "\" & StringTrimRight(@ScriptName, 4) & "_LOG_" ; =============================================================================================================================== ; #CURRENT# ===================================================================================================================== ; GOLLOG_INI ; GOLLOG ; GOLzipLOG ; =============================================================================================================================== ; #INTERNAL_USE_ONLY#============================================================================================================ ; cleanedit ; =============================================================================================================================== #comments-start Changelog: ; V.2.31 2014-2015-2016-2018 only functions up to this version ; V.3.00 2018/07/30 first attempt to convert to UDF ; V.3.02 2018/08/03 bugfix in log folder creation ideas to do don't repeat timestamps, at least on GUI , or highlight only time changes in line option to display also as balloon text one or more lines in line option to write only on screen and not on disk in line option to change font size / color only on one line #comments-end ; #FUNCTION# ==================================================================================================================== ; Name...........: GOLLOG_INI ; Description ...: Initialize variables for GOLLOG edit, and creates the GOLLOG EDIT BOX ; if the Gui window is not existant ($guititle) also creates the windows gui; in this case, the parameters of ; coords and dimensions are used for the new gui window, but are coords and dimensions are inverted ; due to different parameters order in GUICreate and GUICtrlCreateEdit ; if not called gollog only write to disk with default setting (because $guititle = "") ; if called with &guititle = "", the edit box related variables are ignored but you can still define values for the log file ; Syntax.........: GOLLOG_INI ($guititle, $geleft, $getop, $gewidth, $geheight[, $gefontcolor [, $gebkcolor [, $gefont [, $gefontsize [, $gefontweight [, $logfile [, $months2NOTzip ]]]]]]] ) ; Parameters ....: $guititle - name of gui ; $geleft - left coord of the edit (for windows gui: width) ; $getop - top coord of the edit (for windows gui: height) ; $gewidth - width of the edit (for windows gui: left coord) ; $geheight - height of the edit (for windows gui: top coord) ; $gefontcolor - optional color of font in edit control ; $gebkcolor - optional color of background of edit control ; $gefont - optional font type ; $gefontsize - optional size of font ; $gefontweight - optional weight of font ; $logfile - optional complete path\name of the logfile (datetime will be still added to the name) ; otherwise default path\name will be used ; Return values .: Success - Returns "OK" ; Failure - error message, sets @error = 1 ; set @extended ; |1 - left cooord missing ; |2 - top coord missing ; |3 - widht missing ; |4 - height missing ; Author ........: NSC ; Modified.......: ; Remarks .......: ; Related .......: GOLLOG ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func GOLLOG_INI($Fguititle, $Fgeleft, $Fgetop, $Fgewidth, $Fgeheight, $FGEfontcolor = "0x00FF00", $FGEbkcolor = "0x000000", $FGEfont = "consolas", $FGEfontsize = 8, $Fgefontweight = 800, $Flogfile = @ScriptDir & "\logs\" & StringTrimRight(@ScriptName, 4) & "_LOG_") $guititle = $Fguititle $geleft = $Fgeleft $getop = $Fgetop $gewidth = $Fgewidth $geheight = $Fgeheight ; optionally to initialize with func _GOLLOG_INI, otherwise default values used $GEfontcolor = $FGEfontcolor $GEbkcolor = $FGEbkcolor $GEfont = $FGEfont $GEfontsize = $FGEfontsize $gefontweight = $Fgefontweight $logfile = $Flogfile If $guititle = "" Then Return "paramter GUI title missing" EndIf If $geleft = "" Then Return SetError(1, 1, "edit: left cooord missing") If $getop = "" Then Return SetError(1, 2, "edit: top coord missing") If $gewidth = "" Then Return SetError(1, 3, "edit: widht missing") If $geheight = "" Then Return SetError(1, 4, "edit: height missing") If Not WinExists($guititle) Then If $geleft = "" Then Return SetError(1, 1, "GUI: width missing") If $getop = "" Then Return SetError(1, 2, "GUI: heigh missing") If $gewidth = "" Then Return SetError(1, 3, "GUI: left cooord missing") If $geheight = "" Then Return SetError(1, 4, "GUI: top coord missing") $test = GUICreate($guititle, $geleft, $getop, $gewidth, $geheight) ; modify parameters to fit edit in "auto" generated GUI $gewidth = $geleft - 10 $geheight = $getop - 10 $getop = 5 $geleft = 5 cleanedit() GUISetState(@SW_SHOW) Else If $geleft = "" Then Return SetError(1, 1, "left cooord missing") If $getop = "" Then Return SetError(1, 2, "top coord missing") If $gewidth = "" Then Return SetError(1, 3, "widht missing") If $geheight = "" Then Return SetError(1, 4, "height missing") cleanedit() EndIf Return "OK" EndFunc ;==>GOLLOG_INI ; #FUNCTION# ==================================================================================================================== ; Name...........: GOLLOG ; Description ...: writes one line of log ; if there isn't edit control, the line is only written on the log file ; if there is also an associated edit control, it writes both on screen and on file ; Syntax.........: GOLLOG(ByRef $logtext) ; Parameters ....: $logtext - a string of text to be written down on disk and on screen ; if $logtext containg at the end a substring like "|nocrlf50" that line does not CR ("noCRLF") ; except if the max specified number of chars on the line ("50") is excedeed ; next call of Gollog() without substring "|nocrlf50" restores auto Carriage Return behaviour ; Return values .: n/a ; Author ........: NSC ; Modified.......: ; Remarks .......: ; Related .......: GOLLOG_INI,cleanedit ; Link ..........: ; Example .......: no ; =============================================================================================================================== Func GOLLOG($logtext) If Not FileExists($logpath) Then DirCreate($logpath) ; pre-UDF this was in the scripts EndIf $gollogcount += StringLen($logtext) Local $logfiletimerange = @YEAR & @MON Local $linelimit = StringRight($logtext, 2) If StringRight($logtext, 9) = "|nocrlf" & $linelimit Then $logtext = StringTrimRight($logtext, 9) Local $acapo = "no" Else Local $acapo = "si" $gollogcount += 4 If $gollogcount > 13000 And $guititle <> "" Then ;Sleep(3000) cleanedit() ; MsgBox(64, "debug", $conta) $gollogcount = 0 EndIf EndIf If $acapo = "no" And (StringLen($cachelog) <= $linelimit) Then ;pearl perla no CRLF if > linelimt If $lastlog = "nocrlf" Then If WinExists($guititle) Then ; no GUI no on screen log GUICtrlSetData($Gollogedit, $logtext, 1) EndIf Else If WinExists($guititle) Then ; no GUI no on screen log GUICtrlSetData($Gollogedit, @MDAY & "/" & @MON & "_" & @HOUR & ":" & @MIN & " " & $logtext, 1) EndIf EndIf $cachelog = $cachelog & $logtext $lastlog = "nocrlf" Else If $lastlog = "nocrlf" Then If WinExists($guititle) Then ; no GUI no on screen log GUICtrlSetData($Gollogedit, $logtext & @CRLF, 1) EndIf $cachelog = $cachelog & $logtext _FileWriteLog($logfile & $logfiletimerange & ".txt", $cachelog) $cachelog = "" Else If WinExists($guititle) Then ; no GUI no on screen log GUICtrlSetData($Gollogedit, @MDAY & "/" & @MON & "_" & @HOUR & ":" & @MIN & " " & $logtext & @CRLF, 1) EndIf _FileWriteLog($logfile & $logfiletimerange & ".txt", $logtext) EndIf $lastlog = "sicrlf" EndIf EndFunc ;==>GOLLOG ; #FUNCTION# ==================================================================================================================== ; Name...........: GOLzipLOG ; Description ...: takes all log files older than specified number of months, and zip these in a unique zip file, in the same folder ; Syntax.........: GOLLOG(ByRef $months2notZIP) ; Parameters ....: $months2notZIP - number of months (age of log files) to not zip ; Return values .: n/a ; Author ........: NSC ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: no ; =============================================================================================================================== Func GOLzipLOG($months2NOTzip) ; zipping old log leaving unzipped only n months GOLLOG("ZIPping log files older than " & $months2NOTzip & " months") Local $hSearch = FileFindFirstFile($logfile & "*.txt") ; searching for logs Local $logconta = 0 Local $logfiletimerange = @YEAR & @MON While 1 ; single file processing cycle Local $sFileName = FileFindNextFile($hSearch) ; If there is no more file matching the search. If @error Then ExitLoop Local $stringtime = StringTrimRight(StringRight($sFileName, 10), 4) ;obtaining year-month like 201609 If $logfiletimerange - $stringtime > $months2NOTzip Then ;zipping If Not FileExists($logfile & ".zip") Then If Not _Zip_Create($logfile & ".zip", 1) Then GOLLOG("Error " & @error & " creating " & $logfile & ".zip") Else GOLLOG("Created new log archive: " & $logfile & ".zip") EndIf Else GOLLOG("adding to archive: " & $logfile & ".zip") EndIf If Not _zip_additem($logfile & ".zip", $logpath & $sFileName) Then GOLLOG("Error " & @error & " zipping: " & $logpath & $sFileName) Else GOLLOG("Added: " & $logpath & $sFileName) $logconta += 1 If Not FileDelete($logpath & $sFileName) Then GOLLOG("ERROR - Unable to DELETE log file " & $logpath & $sFileName) EndIf EndIf EndIf WEnd GOLLOG("Finished = " & $logconta & " log files zipped") EndFunc ;==>GOLzipLOG ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: cleanedit ; Description ...: create the edit box delete edit box and recreate it with same parameters ; when the edit box is "full" of chars delete edit box and recreate it with same parameters ; parameters are global variables specified in GOLLOG_INI ; Syntax.........: cleanedit() ; Parameters ....: n/a ; Return values .: n/a ; Author ........: NSC ; Modified.......: ; Remarks .......: ; Related .......: GOLLOG_INI ; Link ..........: ; Example .......: no ; =============================================================================================================================== Func cleanedit() ; cleaning of edit every n° lines (in program put if $nlines > xlines then this function) GUICtrlDelete($Gollogedit) $Gollogedit = GUICtrlCreateEdit("", $geleft, $getop, $gewidth, $geheight) ;, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $WS_BORDER)) GUICtrlSetData(-1, "" & @CRLF) GUICtrlSetFont(-1, $GEfontsize, $gefontweight, 0, $GEfont) GUICtrlSetColor(-1, $GEfontcolor) GUICtrlSetBkColor(-1, $GEbkcolor) GUICtrlSetCursor(-1, 3) EndFunc ;==>cleanedit the example code:
      ; *** GOLLOG UDF test script *** ; (C) NSC 2018 #include <_GOLLOG.au3> MsgBox(64,"GOLLOG example 1","no GUI, only write on disk, check the log file in @scriptdir" & @CR & "note: no initialization GOLLOG_INI() is required!") Gollog("this is the first line of log only in the file") MsgBox(64,"GOLLOG example 2","log and edit on pre-existant GUI") $mygui = "edit on existant gui" Guicreate($mygui, 600,300,300,300) GUISetState(@SW_SHOW) gollog_ini($mygui,5,5,590,290) ;basic initialization, no aestetic options Gollog("this is the first line |nocrlf50") ; no carriage return with -> |nocrlf50 Gollog("on the pre-existant GUI") ; auto CR restored $a = 0 while $a < 50 GOLLOG("Example 2 line:" & $a) $a +=1 sleep(100) wend GUIDelete($mygui) MsgBox(64,"GOLLOG example 3","log and edit on 'auto' generated GUI") $mygui = "auto generated GUI" gollog_ini($mygui,600,300,200,200,"0x0033cc","0xffff00","courier") ; initialization with colors and font choice, more options see the UDF Gollog("this is the first line |nocrlf50") Gollog("on the 'auto' generated GUI") $a = 0 while $a < 50 GOLLOG("Example 3 line:" & $a) $a +=1 sleep(100) wend MsgBox(64,"GOLLOG example 4","auto re-creation of edit") ; recreate edit before it is "full" Gollog("to recreation of edit control") while $a < 1500 GOLLOG("Example 4 line:" & $a) $a +=1 wend  
      Some options are a bit weird, because I kept retro-compatibility with all my scripts, removing functions and adding the UDF...
      Greetings to all of you.
       
       
      GOLLOG_UDF_TEST.au3
      _Zip.au3
      _GOLLOG.au3
    • Vivaed
      By Vivaed
      I have another AutoIT script making a Log file 

      Sample of Log file:
      2016/08/22 12:44:18 > Process: [RUNNING] [ACTIVE] 2016/08/22 12:48:35 > Process: [WAS NOT RUNNING] 2016/08/22 13:40:00 > Process: [FAILED] 2016/08/22 14:01:10 > Process: [WAS NOT RUNNING] I am looping through the Log file for  the word "FAILED"
      I then want to get all lines that have "FAILED" and get their TIME
       
      My Current code to get this far:
      If FileExists($fileLog) Then $contents = FileRead($fileLog) If @error Then MsgBox(0, 'File Error', $fileLog & ' could not be read.') Else For $i = 1 To _FileCountLines($fileLog) $result = StringInStr($contents,$search) If $result >= 1 Then $filteredLine = FileReadLine($fileLog,$i) If StringInStr($filteredLine,$search) Then ConsoleWrite($filteredLine & @CRLF) ; this gets me the results I want sans the time parse EndIf Else ConsoleWrite( $search & " not found!" & @CRLF) EndIf Next EndIf EndIf For this part:
      If StringInStr($filteredLine,$search) Then ConsoleWrite($filteredLine & @CRLF) ; this gets me the results I want sans the time parse EndIf OUTPUT: 2016/08/22 13:40:00 > Process: [FAILED] I dont understand how I read the time in that output?
       
      I have tried _DateTimeFormat - Dont think this applies 
      Tried _DateDiff - I dont have a the date yet so this doesnt work
       
      Would love if someone could tell me if I am thinking is the wrong direction and possibly lead me down the correct path to light side of the force  

       
    • stoyan
      By stoyan
      Multi-monitor aware window centring function. Can handle various work area setups as outlined below:

      Those are the variants I've tested.
      #include <Math.au3> #include <WinAPI.au3> #include <WinAPIConstants.au3> #include <WinAPIGdi.au3> #include <WinAPISys.au3> #include <WindowsConstants.au3> Func activeWindowCenter() Const $window = WinGetHandle('[ACTIVE]') Const $monitorInfo = _WinAPI_GetMonitorInfo(_WinAPI_MonitorFromWindow($window)) Const $area[] = [DllStructGetData($monitorInfo[1], 1), DllStructGetData($monitorInfo[1], 3), DllStructGetData($monitorInfo[1], 2), DllStructGetData($monitorInfo[1], 4)] Const $size = WinGetPos($window) If @error Then Return EndIf If BitAND(_WinAPI_GetWindowLong($window, $GWL_STYLE), $WS_MAXIMIZE) Then Return EndIf Const $areaWidth = _Max($area[0], $area[1]) - _Min($area[0], $area[1]) Const $windowOffsetX = ($areaWidth - $size[2]) / 2 Const $x = _Min($area[0], $area[1]) + $windowOffsetX Const $areaHeight = _Max($area[2], $area[3]) - _Min($area[2], $area[3]) Const $windowOffsetY = ($areaHeight - $size[3]) / 2 Const $y = _Min($area[2], $area[3]) + $windowOffsetY WinMove($window, '', $x, $y, $size[2], $size[3], 2) EndFunc Here's simple usage:
      ; include the definition HotKeySet('#o', 'activeWindowCenter') While 1 Sleep(1000) WEnd  
    • draien
      By draien
      Hi
      I was searching for a while now and didn't find anything regarding this:
      Is there a function that returns the "number" of the monitor where the mouse is currently on screen? The same number that appears when you open windows-resolution and click on "identify" (or something). I want to trigger an event when the number changes. I wrote something that recognizes leaving the main monitor. But I couldn't get any further than that (maybe with _WinAPI_EnumDisplayMonitors/Devices/Settings ?) and I wouldn't catch an event, if someone has 3 monitors (aligned 1--2--3 with 1 being main monitor) and changes from 2 to 3. 
      Here is my code:
      The GUI was just for testing. Maybe you can give me some hints :)?
       
    • Fade91
      By Fade91
      Hello, first time poster here
      I am working on a project that has to parse a log file in real time. The thing is I know it's hard for Autoit to attach itself to log files when they're already in use by other programs, at least in my experience.
      I was taking a look at this thread because the log file is quite large and I think Autoit might be a little slow on it's own.

      The thing is I don't know how to use this properly to extract all data out of a log file or is there a native way to do this using Autoit.
      Basically , I just need a log parser that is able to read from a log that is 'already opened' and 'being written to'
       
      Thanks!
×