IPB Предупреждение [2] A non-numeric value encountered (Строка: 3050 файла /sources/ipsclass.php)
LuaPosh - UoKit.com Форумы
 

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

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


*****

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


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Fors1k
сообщение 25.12.2020, 15:17
Сообщение #2


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2231
Пользователь №: 18.746



LuaPosh V8

Selenium
Установка:
--lua
require"luaposh";log "clear";log "mode compact"
PScode('return',{[[#}
#
Install-Selenium

log
#
]]})
Пример задачи:
  1. Открыть яндекс
  2. Найти вики пилота
  3. Открыть вики
  4. Открыть страницу функции Exec
  5. Показать в логе описание функции
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


--------------------
Для связиИзображение
Пользователь в офлайне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   [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

 

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