|
|
|
LuaPosh, Новые возможности пилота |
|
|
Fors1k |
23.3.2020, 18:20
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1714
Пользователь №: 18.746
|
Установка:Написал модуль для возможности писать на PoSh прямо из пилота. Можно писать одновременно как на lua, так и на PoSh внутри одного скрипта. PoSh очень гибкий и компактный язык. Все его возможности доступны без необходимости установки дополнительных модулей (за исключением, кончено, специфических потребностей). Примеры компактности языка: №1задача
Цитата(FREEON @ 17.2.2020, 15:38) Вот еще задачка. нужно найти все комментарии однострочные и многострочные, но данная регулярка не совсем корректно находит многострочные комментарии. Всего комментариев 7(для наглядности в тексте примера их пронумеровал и отметил жиром) из них: 5 однострочных и 2 многострочных Вот рег: <!--(.+|(.|\s)*)--> Вот пример текста: <!--1 однострочный коментарий--> текст <!-- 2 Это -- комментарий --> текст <!-- 3 многострочный коментарий текст какой-то--> текст Эт0 к0д какой-то <!-- 4 это еще один ногострочный коментарий --> текст <!-- 5 это считается коментарием <!-- и это коментарием --> а этот текст уже нет--> <!-- 6 --><!--7-->
Решение на Pilot (только для Ansi, так как с utf pilot не работает вовсе)
Код log clear_current log mode compact load_array %a C:\1.txt for #i 1 size(%a) set $a %a[#i] while regexp(#p $r $a <!--.*?(-->|$)) log $r while copy($r eval(size($r)-2) 3) != --> set #i #i + 1 set $a %a[#i] if regexp(#p $r $a ^.*?-->) log $r break end_if log %a[#i] end_while set $a string_replace($a $r "") end_while end_for log save_current C:\2.txt end_script
Решение на lua
Код --lua log "clear" log "mode compact" package.path = "LuaPlugins\\winapi\\?.lua;" .. package.path package.path = "LuaPlugins\\?.lua;" .. package.path setfenv(1, require'winapi') require'utf8'
local s = readfile([[C:\1.txt]]) local f2 = io.open([[C:\2.txt]], "wb")
if s and f2 then
for w in s:gmatch("<%!%-%-.-%-%->") do log (w .. "\r\n") f2:write(w .. "\r\n") end f2:close() end
exec ("notepad.exe", [[C:\2.txt]])
end_script ()
Решение на LuaPoSh. Сам код на ps занимает всего одну строку. Исходная кодировка текста может быть как юникод, так и Ansi.
--lua require "LuaPoSh";PScode('void',{[[#} # [regex]::Matches((Get-Content C:\1.txt), '<!--.+?-->').value > C:\2.txt;C:\2.txt # ]]})
№2задача
Цитата(neves @ 15.3.2020, 15:57) Hello everyone. I have a problem with showwindow() state commands. In the wiki page are given only these states: Код HIDE: спрятать окно MAXIMIZE: развернуть во весь экран MINIMIZE: свернуть RESTORE: развернуть SHOW: показать TOP: вытащить на поверхность. My question is: Are there any other states which I can use, because none of these worked for my problem? I am trying to minimize and restore given window in windows 10 virtual desktops, without switching between the desktops automatically. I need more like a popup state. When I use RESTORE or MAXIMIZE state, it switches to the virtual desktop where the window is located automatically.
Решение на lua
Код --lua package.path = "LuaPlugins\\winapi\\?.lua;" .. package.path package.path = "LuaPlugins\\glue\\?.lua;" .. package.path setfenv(1, require'winapi') require[[winapi.winuser]]
local ffi = require("ffi") ffi.cdef[[ BOOL ShowWindow(int hWnd, int nCmdShow); ]]
local SW_SHOWNOACTIVATE = 4
hndl=findwindow ("Калькулятор")
C.ShowWindow(hndl[1][1], SW_SHOWNOACTIVATE)
Решение на LuaPoSh. Сам код на ps занимает всего одну строку.
--lua require "LuaPoSh";PScode('void',{[[#} # WinApi ShowWindow([int]$input, 4) # ]]}, findwindow("Калькулятор")[1][1])
№3задача
Цитата(portos @ 3.9.2020, 14:41) в папке D\3 находятся папки с фото,нужно оставить только файлы jpg которые больше 100х100 пикс
Решение на lua
Код --lua local ffi = require('ffi') local gdip = ffi.load('Gdiplus.dll') local CP_ACP = 0
ffi.cdef[[ typedef unsigned int UINT; typedef unsigned long DWORD; typedef struct {UINT GdiplusVersion; int DebugEventCallback; bool SuppressBackgroundThread; bool SuppressExternalCodecs;} GdiplusStartupInput, *pGdiplusStartupInput;
bool DeleteFileA(const char *lpFileName); int GdiplusStartup(int *token, pGdiplusStartupInput GdiplusStartupInput, int *output); int GdiplusShutdown(int token); int GdipDisposeImage(int image); int GdipLoadImageFromFile(const wchar_t *filename, int *image); int GdipGetImageWidth(int image, UINT *width); int GdipGetImageHeight(int image, UINT *height); int MultiByteToWideChar(UINT CodePage, DWORD dwFlags, const char *lpMultiByteStr, int cbMultiByte, wchar_t *lpWideCharStr, int cchWideChar); ]]
function image_size(path) local buf = ffi.new('wchar_t[?]', #path+1) local StartupInput = ffi.new('GdiplusStartupInput', {1, 0, 0, 0}) local token, image, w, h = ffi.new('int[1]'), ffi.new('int[1]'), ffi.new('int[1]'), ffi.new('int[1]') ffi.C.MultiByteToWideChar(CP_ACP, 0, path, #path, buf, ffi.sizeof(buf)) gdip.GdiplusStartup(token, StartupInput, nil) gdip.GdipLoadImageFromFile(buf, image) gdip.GdipGetImageWidth(image[0], w) gdip.GdipGetImageHeight(image[0], h) gdip.GdipDisposeImage(image[0]) gdip.GdiplusShutdown(token[0]) return w[0], h[0] end
log 'clear' log 'mode compact'
local path = [[D:\3]] -- путь к папке
local resultarray, count = dir (path, "*.bmp;*.jpg") -- получить список всех файлов в формате bmp и jpg log ("Найдено файлов: " .. count)
if count then -- если файлы найдены for i=1, #resultarray do local width, height = image_size( resultarray[i][1] ) log(resultarray[i][1].. '\tШирина: ' .. tostring(width) .. '\t'.. 'Высота: ' .. tostring(height)) -- размеры картинки if width < 100 and height < 100 then -- если ширина и высота меньше 100 ffi.C.DeleteFileA( resultarray[i][1] ) -- удалить файл end end end local resultarray, count = dir (path, "*.?*") -- получить список всех файлов log ("Найдено файлов: " .. tostring(count)) if count then -- если файлы найдены for i=1, #resultarray do if resultarray[i][4] ~= '.jpg' then -- если не jpg log('Удаление файла: ' .. resultarray[i][1]) ffi.C.DeleteFileA( resultarray[i][1] ) -- удалить файл end end end
Решение на LuaPoSh. Сам код на ps в 5 раза короче и проще, чем на lua.
--lua require "LuaPoSh";PScode('void',{[[#} # $path = 'D:\3' function Check-PicSize($p){#} $img = [Drawing.Image]::FromFile( $p.fullname ) if($img.width -gt 100 -and $img.Height -gt 100) {$img.Dispose(); $true}else{$img.Dispose(); $false} } Get-ChildItem $path -file -rec|ForEach{#} if(!($_.Extension -eq '.jpg' -and (Check-PicSize $_))) {ri $_.FullName} } # ]]})
Также на PoSh можно создавать задачи в планировщике, редактировать word/excel документы, читать excel по строкам, столбцам, книгам, менять значения в реестре, можно использовать классы и методы .Net, писать в нем на c#...в общем всего не перечислить, а большинство повседневных задач решаются в паре строчек кода.Сообщение отредактировал Deadly - 27.12.2023, 8:38
Прикрепленные файлы
LuaPosh.rar ( 14,29 килобайт )
Кол-во скачиваний: 505
--------------------
Для связи
|
|
|
|
Fors1k |
23.3.2020, 18:41
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1714
Пользователь №: 18.746
|
Синтаксис: Код PScode('return/void',{[[#}
#pscode; #pscode
]]},<arg1>,<arg2>,<arg3>) Цитата return? - 'void', если нам нужно просто выполнить действия ; 'return' - если нам нужно вернуть результат выполненных действий. pscode; - сам код на PoSh. arg - данные, передаваемые PoSh коду из Lua. Для arg1 сделал возможность принимать массивы. Внутри PScode зарезервированы следующие переменные: $return ; $input ; $input1 ; $input2 Пример использования return: Получим список процессов --lua require"luaposh";log "clear";log "mode compact" res = PScode('return',{[[#} # $return=get-process # ]]})
log(res) Пример использования input: 15/4 --lua require"luaposh";log "clear";log "mode compact" a, b = 15, 4 res = PScode('return',{[[#} # $return=$input / $input1 # ]]},a,b)
log(res) Сообщение отредактировал Fors1k - 12.1.2021, 17:14
--------------------
Для связи
|
|
|
|
Fors1k |
24.3.2020, 21:36
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1714
Пользователь №: 18.746
|
Цитата(FREEON @ 24.3.2020, 20:46) Прыыыкона. пытался погуглить чо за Lua Posh Цитата(Fors1k @ 23.3.2020, 18:20) Написал модуль для возможности писать на PoSh прямо из пилота. Я только вчера его создал, так что гугл про него пока не в курсе )) Цитата(FREEON @ 24.3.2020, 20:46) примеры какие .. Ну что бы не придумывать их из головы, я для примеров просто брал задачи от пользователей на нашем форуме из недавних тем. Вот тогда еще один пример. Задача
Цитата(portos @ 5.3.2020, 1:45) 1.txt - 81 351920450784 2.txt - 81 109.248.51.148 24531 aaaaaa 2bb2bbb2b 3.txt - 81 Mozilla/5.0 (Linux; Android 4.0; F3555 Build/23.2.B.4.70) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.362 результат 4.txt - 351920450784:nnnnnn|109.248.51.148:24531:aaaaaa:2bb2bbb2b|Mozilla/5.0 (Linux; Android 4.0; F3555 Build/23.2.B.4.70) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.362
из 1.txt берём номер (351920450784) добавляем : двоеточие и слово (оно одинаково во всех строках) знак | из 2.txt берём 109.248.51.148 24531 aaaaaa 2bb2bbb2b (вместо пробелов ставим : ) знак | из 3.txt берём Mozilla/5.0 (Linux; Android 4.0; F3555 Build/23.2.B.4.70) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.362
и так по порядку все строки (81 это номер строки)
Решение на lua
Код --lua package.path = "LuaPlugins\\winapi\\?.lua;" .. package.path package.path = "LuaPlugins\\?.lua;" .. package.path setfenv(1, require'winapi') require'utf8'
local f1, f2, f3 = {}, {}, {} for s in string.gmatch(readfile([[C:\1.txt]]), "[^\r\n]+") do table.insert(f1, s)end for s in string.gmatch(readfile([[C:\2.txt]]), "[^\r\n]+") do table.insert(f2, s)end for s in string.gmatch(readfile([[C:\3.txt]]), "[^\r\n]+") do table.insert(f3, s)end local f4 = io.open([[C:\4.txt]], "wb")
if f1 and f2 and f3 and f4 then -- чтение файлов в массивы local arr1, arr2, arr3 = {}, {}, {} for i=1,#f1 do arr1[#arr1+1] = f1[i]:match("%d+%s+(.+)") end for i=1,#f2 do arr2[#arr2+1] = string.gsub(f2[i]:match("%d+%s+(.+)"), " ", ":") end for i=1,#f3 do arr3[#arr3+1] = f3[i]:match("%d+%s+(.+)") end
local min = math.min (#arr1, #arr2, #arr3) for i = 1, min do -- запись в файл f4:write(arr1[i]) f4:write(":nnnnnn|") f4:write(arr2[i]) f4:write("|") f4:write(arr3[i]) f4:write("\r\n") end f4:close() -- закрыть файл
exec ("notepad.exe", [[C:\4.txt]]) else log ("Какой-то из файлов не открылся или не найден") end Решение на LuaPoSh --lua require"luaposh";log "clear";log "mode compact" PScode('return',{[[#} # $1=Gc C:\1.txt;$2=Gc C:\2.txt;$3=Gc C:\3.txt for($i = 0;$i -lt $1.count;$i++){#} $res+= [regex]::Matches($1[$i], '(?<=\w\s).+').value+":nnnnnn|" $res+=([regex]::Matches($2[$i], '(?<=\w\s).+').value -replace " ",":")+"|" $res+= [regex]::Matches($3[$i], '(?<=\w\s).+').value $res >> C:\4.txt;$res=$null }C:\4.txt # ]]})
Описывай свою задачу, или задавай, какие есть, вопросы, постараюсь дать ответ. Цитата(FREEON @ 24.3.2020, 20:46) список команд посматреть Список командСообщение отредактировал Fors1k - 11.1.2021, 19:47
--------------------
Для связи
|
|
|
|
Fors1k |
27.3.2020, 15:43
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1714
Пользователь №: 18.746
|
Цитата(Levo222 @ 27.3.2020, 14:10) Как он может решить задачу findcolor/findimage?
Зачем ему решать эти задачи, если они уже решены в пилоте?) Цитата(Fors1k @ 23.3.2020, 18:20) Можно писать одновременно как на lua, так и на PoSh внутри одного скрипта. Вот поиск цвета для примера №1. Выгрузить все комментарии из файла, если появится цвет. --lua require "luaposh"
if color( 336, 42, 3870786 ) == 16777215 then PScode('void',{[[#} # [regex]::Matches((Get-Content C:\1.txt), '<!--.+?-->').value >C:\2.txt # ]]}) end
Сообщение отредактировал Fors1k - 11.1.2021, 19:49
--------------------
Для связи
|
|
|
|
Fors1k |
30.3.2020, 18:48
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1714
Пользователь №: 18.746
|
LuaPosh V2 - Добавил prompt. Вроде того, что был на пилоте. Пока только текстовое поле.
text_prompt "Text:" Запрос на ввод значения для примера №1.
--lua require "LuaPoSh" PScode('r',{[[#} # [regex]::Matches((Get-Content (text_prompt "Путь к исходнику:")), '<!--.+?-->').value >(text_prompt "Куда сохранить?") # ]]})
Совет:
Имейте в виду, что путь для сохранения будет запрошен первым, хоть и находится в конце кода. Что бы избежать ошибок, не стоит использовать одинаковые подсказки для prompt( или смотрите следующий пример).
[regex]::Matches(Get-Content (text_prompt "Путь:"), '<!--.+?-->').value >(text_prompt "Путь:")
В следующем примере введеные данные из запроса сначала будут занесены в переменные. Кстати, при такой записи мы точно знаем порядок запросов, и можем использовать одинаковые подсказки.
--lua require "LuaPoSh" PScode('r',{[[#} # $pathIN = text_prompt "Путь:" $pathOUT = text_prompt "Путь:" [regex]::Matches((Get-Content $pathIN), '<!--.+?-->').value >$pathOUT # ]]})
Можно в любом месте скрипта просто сделать запрос данных для дяльнейшего использования.
--lua require "luaposh" -- код a=PScode('r',{[[$return=text_prompt]]}) log(a) -- код -- В переменной a находятся введенные данные.
- Добавил возврат информации об ошибке. По умолчанию возвращаются только прерывающие ошибки.
Например, проверим, запущен ли калькулятор, но допустим ошибку в имени команды.
--lua log "clear" require "luaposh" Calc=PScode('r',{[[#} # if(Get-PrUocess *calc){$return=$true} else{$return=$false} # ]]}) log(Calc)
В ответ получим:
Код Get-PrUocess : Имя "Get-PrUocess" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность ... Теперь сразу понятно где надо исправить опечатку.
- Булен будет возвращаться как string со значениями 'true' или 'false'.
--lua require "luaposh" Calc=PScode('r',{[[#} # if(Get-Process *calc){$return=$true} else{$return=$false} # ]]}) if Calc=='true' then log("Калькулятор запущен!") end
Сообщение отредактировал Fors1k - 8.8.2021, 4:00
--------------------
Для связи
|
|
|
|
Fors1k |
13.4.2020, 1:21
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1714
Пользователь №: 18.746
|
LuaPosh V3
Цитата(Levo222 @ 27.3.2020, 14:10) Как он может решить задачу findcolor/findimage? Теперь вот так
--lua log"clear";log"mode compact";require "luaposh" PScode('return',{[[#} # $startX,$startY,$endX,$endY = 0, 0, 1920, 1080 # Координаты $color=14811135 # цвет $window=5772790 # хэндл окна
while($arr.Count -lt 1 -and (on)){#} # Цикл поиска $arr=lua @" workwindow($window) local a = findcolor($startX, $startY, $endX, $endY, 1, 1, '(' .. $color .. ')', "%arr", 2, 1)
reposh(arr) -- вернуть arr (return) "@ }
$x,$y=$arr[0][0],$arr[0][1] lua "move($x, $y)" # Переместить курсор в найденную точку # ]]})
Если где-то посреди скрипта вам понадобилось воспользоваться функцией пилота по поиску цвета(или любой другой), то теперь это стало возможным.
Подключил вывод консоли напрямую к логу. Раньше данные можно было получить только после окончания работы блока pscode, теперь же можно получать сразу через команду log. Пример:
--lua log"clear";log"mode compact";require "luaposh" PScode('return',{[[#} # $Processes=Get-Process # Получить список процессов log $Processes # Вывести список в лог # ]]})
--lua log"clear";log"mode compact";require "luaposh" PScode('return',{[[#} # $dir=Get-ChildItem C:\ # Запросить содержимое диска log $dir # Вывести в лог # ]]}) В следующем примере показано как можно получить ошибки предыдущих команд
--lua log"clear";log"mode compact";require "luaposh" PScode('return',{[[#} # $dir=Get-ChildItem T:\ # Запросить содержимое диска $dir=Get-ChildItem R:\ # Запросить содержимое диска log # Запросить ошибки # ]]}) В логе:
Цитата Get-ChildItem : Не удалось найти диск. Диск с именем "R" не существует. ... + CategoryInfo : ObjectNotFound: (R:String) [Get-ChildItem], DriveNotFoundException + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand Get-ChildItem : Не удалось найти диск. Диск с именем "T" не существует. ... + CategoryInfo : ObjectNotFound: (T:String) [Get-ChildItem], DriveNotFoundException + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand Добавил определение статуса нажатых клавиш. Пример ожидания клика левой кнопкой мышки. Запустите скрипт, подождите, и потом кликните мышкой в любое место.
--lua log"clear";log"mode compact";require "luaposh" PScode('return',{[[#} # Get-KeyState 1 while(!(Get-KeyState 0x01) -and (on)){sleep -m 100} # Ожидаем клик ЛКМ # ]]})
msg("Хватит кликать!") В posh есть доступ к WinApi. Добавил возможность быстрого обращения к функциям.- Сместить курсор на 500 вправо, и на 230 вверх
--lua log"clear";log"mode compact";require "luaposh" PScode('void',{[[#} # WinApi mouse_event(1, 500, -230, 0, 0) # ]]}) Параметры: -returnType bool по умолчанию -dllName user32.dll по умолчанию
-
Для корректного отображения таблиц в логе, нужно открыть настройки пилота-> Выбрать шрифт лога-> Lucida Console. Для каждого цикла в конце добаляйте условие (on). Это видно в примерах данного поста. Это нужно для того, что бы цикл останавливался, если вы нажали стоп в пилоте.
Архив с обновлением в первом посте. Сообщение отредактировал Fors1k - 12.1.2021, 1:58
--------------------
Для связи
|
|
|
|
Fors1k |
14.4.2020, 1:16
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1714
Пользователь №: 18.746
|
Дополнение к V3 Отображение текста(и не только) в любом месте экрана. Автор дополнения cirus Пример: --lua require'LuaPoSh' PScode('void',{[[luaposhhint]]}) local HNDL=tbhndl() local x = 0
-- выполнять данный блок 5 секунд local time = os.clock() + 5 while os.clock() < time do drawtext(HNDL, 'x = ' .. tostring(x) .. '\r\n' .. 'Текст', 200, 100, 36, 'Arial', 65280, 255) x = x + 1 drawtext(HNDL, 'Текст\r\nМногострочный', 70, 300, 48, 'Segoe Print', 65279, 16000000) drawtext(HNDL, 'Text 123 qwerty\r\nЕще текст\r\nи ещё' , 400, 150, 24, 'Comic Sans MS', 255, 0) wait (10) end text_close() -- Закрыть luaPoshHint Демонстрация: Функция drawtext принимает параметры: Цитата 1. Хендл окна, на которое выводить текст. 2. Строка, которую нужно отобразить. 3. Координата X. 4. Координата Y. 5. Размер шрифта. 6. Имя шрифта. 7. Фон текста. 8. Цвет текста. Сообщение отредактировал Fors1k - 16.4.2021, 17:58
--------------------
Для связи
|
|
|
|
Fors1k |
14.4.2020, 16:42
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1714
Пользователь №: 18.746
|
Дополнение к V3 И еще одна новинка. Вывод части изображения выбранного окна поверх всех окон. Окно может быть перекрыто (но, не свёрнуто) или быть на другом рабочем столе. Автор дополнения cirus Пример: демонстрация
--lua require'LuaPoSh' PScode('void',{[[luaposhhint]]}) local HNDL=tbhndl()
local handle = findwindow ("Калькулятор") -- окно, с которого нужно отобразить на экране часть изображения
if handle then -- если окно найдено while true do visualwindow(HNDL, handle[1][1], 0, 0, 300, 250, 200, 100, 100) -- HNDL хендл окна, куда выводить изборажение -- handle[1][1] - хендл окна откуда получать изображение -- 0, 0, 300, 250 - относительные координаты, с которых будет получено изображение -- 200, 100 - абсолютные координаты вывода изображения на экран -- 100 - масштаб вывода в процентах (изображение будет сжато или растянуто если не 100%) wait(10) end else log ("Окно не найдено") end Сообщение отредактировал Fors1k - 11.1.2021, 23:41
--------------------
Для связи
|
|
|
|
Fors1k |
17.4.2020, 18:47
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1714
Пользователь №: 18.746
|
LuaPosh V4 Добавил таймеры. Таймер выполняет заданный код через определенные интервалы времени. В следующем примере представлен скрипт с тремя "потоками". Первый следит за кликами левой кнопкой миши. Второй следит за нажатием на пробел. Третий - основной поток, он просто считает. --lua log "clear";require "luaposh" PScode('return',{[[#} # Get-KeyState 0x01 # пропускаем клик при запуске скрипта
# Поток 1 Start-Timer @" if ((Get-KeyState 0x01)){#} # отслеживаем нажатие левой кнопки мыши msg_box "Нажата левая кнопка мыши" # действия таймера log "ЛКМ" # действия таймера } "@ 500 # интервал выполнения 500 ms
Get-KeyState 0x20 # пропускаем пробел, нажатый до запуска
# Поток 2 Start-Timer @" if ((Get-KeyState 0x20)){#} # отслеживаем нажатие пробела msg_box "Нажат пробел" # действия таймера log "ПРОБЕЛ" # действия таймера } "@ 500 # интервал выполнения 500 ms # Основной поток while((on)){#} log ("Я просто считаю: "+$i++) sleep -m 250 } # ]]})
Добавлен вывод сообщений на экран. Msg_box "text"Архив с обновлением в первом посте. Сообщение отредактировал Fors1k - 11.1.2021, 23:44
--------------------
Для связи
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|