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

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


*****

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


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
3 страниц V < 1 2 3  
Ответить в эту темуОткрыть новую тему
Ответов(40 - 57)
Madeus
сообщение 7.4.2021, 16:55
Сообщение #41


****

Apprentice
Сообщений: 283
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 8541
Пользователь №: 19.451
Возраст: 32



Как работает хайд и есть ли возможность хайдить другие процессы?
Код
--lua
log"clear";log"mode compact";require"luaposh"
PScode('void',{[[Hide-UoPilot]]})
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 7.4.2021, 17:39
Сообщение #42


*****

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



Madeus, Hide-UoPilot прячет процесс пилота от защит, пытающихся его найти.
Насчет других процессов - да, можно. Но какие-то может быть и не получится, нужно будет тестить.

Сегодня или в ближайшие дни сделаю функцию для других процессов.

Сообщение отредактировал Fors1k - 7.4.2021, 17:39


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 7.4.2021, 18:25
Сообщение #43


*****

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



Набросал вот по-быстрому, попробуй.
--lua
log"clear";log"mode compact";require"luaposh"
PScode('void',{[[Start-HiddenProcess "C:\files\program.exe" "MySQL Service"]]})

Команда получилась длинноватой, так что сделал ей алиас. Вместо Start-HiddenProcess можно писать s-hp.

Сообщение отредактировал Fors1k - 7.4.2021, 18:30


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 7.4.2021, 18:39
Сообщение #44


****

Apprentice
Сообщений: 283
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 8541
Пользователь №: 19.451
Возраст: 32



Цитата(Fors1k @ 7.4.2021, 18:25) *

Набросал вот по-быстрому, попробуй.

Что-то не робит
Код
--lua
log"clear";log"mode compact";require"luaposh"
PScode('void',{[[Start-HiddenProcess "C:\Notepad++\notepad++.exe"]]})
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 7.4.2021, 18:49
Сообщение #45


*****

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



Скачал notepad++, у меня получилось.

А, ну этой команде нужно передавать два параметра. Второй можно любой на свой вкус.

Вот так попробуй:
--lua
log"clear";log"mode compact";require"luaposh"
PScode('void',{[[Start-HiddenProcess "C:\Notepad++\notepad++.exe" "MySQL Service"]]})


Сообщение отредактировал Fors1k - 7.4.2021, 18:51


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 7.4.2021, 19:00
Сообщение #46


****

Apprentice
Сообщений: 283
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 8541
Пользователь №: 19.451
Возраст: 32



Цитата(Fors1k @ 7.4.2021, 18:49) *

А, ну этой команде нужно передавать два параметра. Второй можно любой на свой вкус.

Вот так попробуй:

Все так же, курс я понял, просто через powershell запускает
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 7.4.2021, 19:19
Сообщение #47


*****

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



Цитата(Madeus @ 7.4.2021, 19:00) *

Все так же

Создаётся процесс с именем notepad++.exe?
У меня создаётся процесс с именем второго параметра. В данном случае MySQL Service.

Сообщение отредактировал Fors1k - 7.4.2021, 19:20


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 7.4.2021, 19:46
Сообщение #48


****

Apprentice
Сообщений: 283
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 8541
Пользователь №: 19.451
Возраст: 32



Цитата(Fors1k @ 7.4.2021, 19:19) *

Создаётся процесс с именем notepad++.exe?
У меня создаётся процесс с именем второго параметра. В данном случае MySQL Service.

Вообще не запускает

Решил проверить другие функции posh, чет вообще ничего не работает... позже буду разбираться

Вчера работало
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 7.4.2021, 22:04
Сообщение #49


****

Apprentice
Сообщений: 283
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 8541
Пользователь №: 19.451
Возраст: 32



В общем нужна помощь) Вчера скачал - распаковал - обновил - установил.
Попробовал
Код
PScode('void',{[[Hide-UoPilot]]})
Перезапустился пилот.
Сегодня 0 реакции на любой скрипт связанный с posh. Ребут не помог.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 8.4.2021, 1:31
Сообщение #50


*****

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



Переустанови luaposh. Удали luaposh.lua и папку posh, распакуй зоново архив, и обновись через апдейт.
Поправил сокрытие процесса, теперь по идее проблем быть не должно.

Еще немного доработал, теперь вот так выглядит:
Прикрепленное изображение
Прикрепленное изображение

И Start-HiddenProcess теперь можно запускать с одним параметром - путь к файлу.

Сообщение отредактировал Fors1k - 8.4.2021, 1:37


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 8.4.2021, 3:07
Сообщение #51


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26782
Пользователь №: 16.971
Возраст: 29



Цитата
Сегодня 0 реакции на любой скрипт связанный с posh.

Посмотри журнал антивирусника/защитника windows, нет ли там блокировки скриптов powershell.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 8.4.2021, 3:28
Сообщение #52


****

Apprentice
Сообщений: 283
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 8541
Пользователь №: 19.451
Возраст: 32



Цитата(Fors1k @ 8.4.2021, 1:31) *

Переустанови luaposh. Удали luaposh.lua и папку posh, распакуй зоново архив, и обновись через апдейт.
Поправил сокрытие процесса, теперь по идее проблем быть не должно.

Еще немного доработал, теперь вот так выглядит:
Прикрепленное изображение
Прикрепленное изображение

И Start-HiddenProcess теперь можно запускать с одним параметром - путь к файлу.

Помогло, в итоге пилот просто переименовывается? При чем если включено переименование в настройках то просто перезапускается. А старт процесса запускает приложение, но в диспетчере не переименовывается

Цитата(cirus @ 8.4.2021, 3:07) *

Посмотри журнал антивирусника/защитника windows, нет ли там блокировки скриптов powershell.

Журнал пустой
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 8.4.2021, 11:41
Сообщение #53


*****

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



Цитата(Madeus @ 8.4.2021, 3:28) *
переименование в настройках
Это?
Прикрепленное изображение
Оно просто меняет имя окна, процесс так и остается uopilot.exe
Сейчас с пилотом получается как у меня на скрине?

Цитата(Madeus @ 8.4.2021, 3:28) *
А старт процесса запускает приложение, но в диспетчере не переименовывается
Блин, уже удалил notepad++, снова сейчас скачал, что бы затестить его запуск)
Вот запущенный notepad++:
Прикрепленное изображение
У тебя не так?


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 8.4.2021, 13:45
Сообщение #54


****

Apprentice
Сообщений: 283
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 8541
Пользователь №: 19.451
Возраст: 32



Цитата(Fors1k @ 8.4.2021, 11:41) *

Это?
Прикрепленное изображение
Оно просто меняет имя окна, процесс так и остается uopilot.exe
Сейчас с пилотом получается как у меня на скрине?

Да, у меня всегда переименован exe пилота и в настройках тоже самое прописано, если стоит галочка переименовывать пилот то твой скрипт просто его перезапускает, если галочку убрать то работает как у тебя.
Цитата(Fors1k @ 8.4.2021, 11:41) *

Блин, уже удалил notepad++, снова сейчас скачал, что бы затестить его запуск)
Вот запущенный notepad++:
Прикрепленное изображение
У тебя не так?

Нет, у меня запускает с тем же именем что и всегда, notepad для примера, пробовал разное запускать. Из замеченного, в момент запуска exe того же notepad переименовывается "удаляется имя" потом стартует процесс, потом exe переименовывается обратно, в диспетчере при этом имя не меняется.

P.S. А есть варианты хайдить уже запущенный процесс?)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 8.4.2021, 18:06
Сообщение #55


*****

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



Notepad не получится так запустить, так как его владелец не пользователь, а trustedinstaller.
Убирать имя уже запущенного процесса - на сколько я знаю, невозможно.

Сообщение отредактировал Fors1k - 8.4.2021, 18:06


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 25.11.2021, 0:43
Сообщение #56


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



не нашел кнопки скачать)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
yodich
сообщение 18.12.2023, 23:12
Сообщение #57


***

Novice
Сообщений: 90
Регистрация: 24.8.2020
Группа: Пользователи
Наличность: 0
Пользователь №: 19.728
Возраст: 29



Библиотека LuaPosh


Прикрепленные файлы
Прикрепленный файл  LuaPosh.rar ( 14,29 килобайт ) Кол-во скачиваний: 61
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Deadly
сообщение 27.12.2023, 9:29
Сообщение #58


********

ex. Администратор
Сообщений: 1.360
Регистрация: 9.9.2006
Группа: Супермодераторы
Наличность: 1149
Пользователь №: 7.737



Цитата(yodich @ 19.12.2023, 1:12) *
Библиотека LuaPosh

Прикрепили файл в начало темы.


--------------------
Контактная ICQ: 390-899-494. Изображение
Умейте ценить тех людей, которым всегда есть до вас дело. Они не вечны (с).
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

3 страниц V < 1 2 3
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

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