|
LuaPosh, Новые возможности пилота |
|
|
Fors1k |
23.3.2020, 18:20
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2231
Пользователь №: 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 килобайт )
Кол-во скачиваний: 133
--------------------
Для связи
|
|
|
|
|
|
Ответов
Fors1k |
25.12.2020, 15:17
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2231
Пользователь №: 18.746
|
LuaPosh V8 SeleniumУстановка:--lua require"luaposh";log "clear";log "mode compact" PScode('return',{[[#} # Install-Selenium
log # ]]}) Пример задачи:- Открыть яндекс
- Найти вики пилота
- Открыть вики
- Открыть страницу функции Exec
- Показать в логе описание функции
code
--lua require"luaposh";log "clear";log "mode compact" PScode('return',{[[#} # Start-Selenium
$luaFunction = 'Exec (Lua)'
$Chrome = Start-SeChrome $Chrome.Url = 'https://ya.ru' sleep 1 $Chrome.FindElementByName('text').SendKeys('uopilot') sleep 1 $Chrome.FindElementByClassName('search2__button').click() sleep 2 $Chrome.FindElementByPartialLinkText('uokit').click() sleep 1 [void]$Chrome.SwitchTo().Window($Chrome.WindowHandles[1]) $Chrome.FindElementById('searchInput').SendKeys($luaFunction) sleep 1 $Chrome.FindElementByName('go').click() $description = $chrome.FindElementsByTagName('p')[0].text log $description # ]]})
демонстрация
Слипы добавлены просто для возможности понаблюдать за происходящим. Результат в логе:Цитата exec - запуск внешнего приложения. Не приостанавливает скрипт на время работы приложения. Для ожидания завершения используйте ExecAndWait (Lua). UoPilot запускать от администратора. Для примера выше должен быть установлен Chrome browser. Пишите, если что-то не будет работать. Буду исправлять. Все его возможности пока не знаю, так что описывайте вашу задачу, постараюсь дать решение. Сообщение отредактировал Fors1k - 11.4.2021, 12:40
--------------------
Для связи
|
|
|
|
Сообщений в этой теме
Fors1k LuaPosh 23.3.2020, 18:20 Fors1k Синтаксис:
PScode('return/void',{... 23.3.2020, 18:41 FREEON Прыыыкона.
Ток пытался погуглить чо за Lua Posh сп... 24.3.2020, 20:46 Fors1k Прыыыкона.
пытался погуглить чо за Lua PoshНаписал... 24.3.2020, 21:36 Levo222 Как он может решить задачу findcolor/findimage? 27.3.2020, 14:10 Fors1k
Как он может решить задачу findcolor/findimage?
... 27.3.2020, 15:43 cirus
Никак. Таких функции у винды нет. 27.3.2020, 14:13 Fors1k [font=Arial Black]LuaPosh V2
[*]Добавил prompt. Вр... 30.3.2020, 18:48 Fors1k [font=Arial Black]LuaPosh V3
[*]
[quote name='Levo... 13.4.2020, 1:21 Fors1k Дополнение к V3
Отображение текста(и не только) в ... 14.4.2020, 1:16 Levo222 Ладно. С многопоточкой твой LuaPosh точно не справ... 14.4.2020, 11:49 cirus
Она и не нужна, таймеры пригодились бы... 14.4.2020, 11:59 Fors1k
таймеры пригодились бы...
Да я думаю можно будет... 14.4.2020, 15:52 Fors1k Дополнение к V3
И еще одна новинка. Вывод части из... 14.4.2020, 16:42 Fors1k [font=Arial Black]LuaPosh V4Добавил таймеры. Тайме... 17.4.2020, 18:47 Fors1k Демонстрация вывода данных в лог
https://fors1k.ru... 18.4.2020, 14:07 Fire73 Доброго времени суток!
Подскажите, как с его ... 21.4.2020, 18:21 Fors1k Подскажите, как с его помощью получить из файла вс... 21.4.2020, 18:43 Fire73
--lua
log"clear";log"mode compact... 21.4.2020, 19:28 Fors1k Небольшие изменения и исправления.
Архив с обно... 23.4.2020, 20:54 Fire73 Дано:
89997001234:Forsik007:Алла Пугачева:uopilot... 6.6.2020, 18:09 Fors1k Благодаря команде split, мы можем обойтись без пос... 6.6.2020, 18:36 Levo222
Распаковать рядом с exe пилота.
v. 4.1 Прикреплен... 17.6.2020, 16:48 Fors1k Архив битый
Что значит битый? У всех других открыв... 17.6.2020, 17:54 Levo222
Что значит битый? У всех других открывается норма... 17.6.2020, 17:56 Fors1k У меня всё через одно место.
Тогда в чем здесь вин... 17.6.2020, 18:17 Levo222
Тогда в чем здесь вина моего архива?
Когда он не... 17.6.2020, 19:17 Fors1k Может именно rar не хочет открывать у вас.
17.6.2020, 20:49 Fors1k [font=Arial Black]LuaPosh V5
[*] Добавил команду о... 9.7.2020, 19:15 Fors1k Prompt с возможностью выбора вариантов.
[note][b]... 15.7.2020, 15:13 DarkMaster Скорость работы этой либы отличается от скорости з... 20.9.2020, 8:51 cirus Долго первый запуск, потом нормально. 20.9.2020, 11:40 Fors1k У меня старт занимает 1.73 сек. Поработаю еще над ... 21.9.2020, 18:47 Fors1k [font=Arial Black]LuaPosh V6
[color=#000000][b]Диа... 28.9.2020, 1:33 Fors1k [font=Arial Black]LuaPosh V7
[color=#000000][b]Экр... 9.10.2020, 17:52 Fors1k [b]Добавлены параметры для экранной лупы.
[b]-fr... 14.10.2020, 15:40 Fors1k Поколдовал над запуском.
[color=#006400]--lua
log ... 18.10.2020, 20:38 Fors1k Лично у меня пош стартует около 15 секунд.Всё, нак... 22.12.2020, 0:33 Fors1k [b]Тернарный оператор.Синтаксис сделал обычный: [b... 2.2.2021, 18:46 Madeus Как работает хайд и есть ли возможность хайдить др... 7.4.2021, 16:55 Fors1k Madeus, Hide-UoPilot прячет процесс пилота от защи... 7.4.2021, 17:39 Fors1k Набросал вот по-быстрому, попробуй.
[color=#006400... 7.4.2021, 18:25 Madeus
Набросал вот по-быстрому, попробуй.
Что-то не ро... 7.4.2021, 18:39 Fors1k Скачал notepad++, у меня получилось.
А, ну этой к... 7.4.2021, 18:49 Madeus
А, ну этой команде нужно передавать два параметра... 7.4.2021, 19:00 Fors1k
Все так же
Создаётся процесс с именем notepad++.... 7.4.2021, 19:19 Madeus
Создаётся процесс с именем notepad++.exe?
У меня ... 7.4.2021, 19:46 Madeus В общем нужна помощь) Вчера скачал - распаковал - ... 7.4.2021, 22:04 Fors1k Переустанови luaposh. Удали luaposh.lua и папку po... 8.4.2021, 1:31 Madeus
Переустанови luaposh. Удали [b]luaposh.lua и папк... 8.4.2021, 3:28 Fors1k переименование в настройкахЭто?
Оно просто меняет... 8.4.2021, 11:41 Madeus
Это?
Оно просто меняет имя окна, процесс так и о... 8.4.2021, 13:45 cirus
Посмотри журнал антивирусника/защитника windows, ... 8.4.2021, 3:07 Fors1k Notepad не получится так запустить, так как его вл... 8.4.2021, 18:06 dron4938 не нашел кнопки скачать) 25.11.2021, 0:43 yodich Библиотека LuaPosh 18.12.2023, 23:12 Deadly Библиотека LuaPosh
Прикрепили файл в начало темы. 27.12.2023, 9:29
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|