Не уверен, что правильно понимаю, что должно быть результатом, но вот такой пример должен сгодиться для ориентира:
#SingleInstance, Force
#NoEnv
SetWorkingDir, A_ScriptDir
SetBatchLines, -1
; >>--++--<< >>--++--<<
INI := "Data\Config.ini"
chatLog := "chatlog.txt" ; A_MyDocuments . "\GTA San Andreas User Files\SAMP\chatlog.txt"
IfNotExist, Data
FileCreateDir, Data
IfNotExist,% INI
FileAppend,,% INI,UTF-16
IfNotExist,% chatLog
FileAppend,,% chatLog,UTF-8
; >>--++--<< >>--++--<<
IniRead,check_log,% INI,Main,check_log
if (check_log == "ERROR") {
check_log := 1
IniWrite,% check_log,% INI,Main,check_log
}
; >>--++--<< >>--++--<<
Gui,1: Margin, 5, 5
Gui,1: Add, Checkbox,gCheckToggle Checked%check_log%,Читать лог
Gui,1: Add, Edit,xm y+5 w600 r20 vmy_edit ReadOnly
Gui,1: Show,,Log Reader
logFile := FileOpen(chatLog,"r","UTF-8")
logLen := 0
logData := ""
Run,% chatLog
if (check_log) {
SetTimer,LogReader,100
}
return
CheckToggle:
IniWrite,% (check_log := !check_log),% INI,Main,check_log
if (check_log)
SetTimer,LogReader,100
else
SetTimer,LogReader,Off
return
LogReader:
if (logFile.Length > logLen) {
logLen := logFile.Length
logData := logFile.Read()
GuiControl,Text,my_edit,% logData
}
return
GuiClose:
logFile.Close()
ExitApp
На старте читает настройку "check_log" из "Config.ini", лежащего в папке "Data" и, соответственно, отмечает галочкой чекбокс, или нет, а так же, соответствуя этому, начинает читать файл лога, путь к которому сохранён в "chatLog". При чтении лога, указатель перемещается в конец файла всякий раз, когда в него добавляются новые строки, помещая в "logData" только ту информацию, которая была записана последней. Таким образом исключается необходимость постоянно обрабатывать данные всего файла, что должно существенно ускорить процесс обработки поступающих в лог данных. У Вас, например, каждый раз всё содержимое файла попадает в переменную. Если в работе нужна только обновляющаяся информация, то работа с лог-файлом очень большой длины, будет всё сложнее, с его ростом.
К тому же, чтение происходит не всякий раз при обходе кода по таймеру, как в Вашем примере, а только в том случае, если в файл была произведена запись.
Попробуйте написать что-либо в открытый для теста файл, сохранить результат и посмотреть в GUI скрипта, проделав это несколько раз в таком порядке.