Здравствуйте, гость ( Вход | Регистрация )

> LuaPosh, Новые возможности пилота
Fors1k
сообщение 23.3.2020, 18:20
Сообщение #1


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2419
Пользователь №: 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 килобайт ) Кол-во скачиваний: 80


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
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   [font=Arial Black]LuaPosh V8 [color=#000000][b]Sel...   25.12.2020, 15:17
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

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 13:31
Designed by Nickostyle