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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> LuaPosh, Новые возможности пилота
Fors1k
сообщение 23.3.2020, 18:20
Сообщение #1


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 18.746



Совет:
Начиная с версии 4.1 обновления устанавливаются через Update:
Код
--lua
require "luaposh"
PScode('void',{[[update]]})
Готов к работе после сообщения Updated!
Совет:
Распаковать рядом с exe пилота, и выполнить Update.
v. 4.1 Прикрепленный файл  luaposh_v4.1.rar ( 5,08 килобайт ) Кол-во скачиваний: 62

архив
Совет:
Распаковать рядом с exe пилота.
v. 4 Прикрепленный файл  luaposh_v4.rar ( 5,01 килобайт ) Кол-во скачиваний: 37
Совет:
Распаковать рядом с exe пилота.
v. 3 Прикрепленный файл  luaposh_v3.rar ( 3,31 килобайт ) Кол-во скачиваний: 31
Совет:
Распаковать рядом с exe пилота.
v. 2 Прикрепленный файл  luaposh_v2.rar ( 1,88 килобайт ) Кол-во скачиваний: 43
Совет:
Распаковать рядом с exe пилота.
v. 1 Прикрепленный файл  luaposh.rar ( 1010 байт ) Кол-во скачиваний: 37

Написал модуль для возможности писать на 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
hndl=findwindow ("Калькулятор")
require"LuaPoSh";PScode('void',{[[#}

$sig='[DllImport("user32.dll")]public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);';
$winapi=add-type -memberd $sig -name "win32showwindowasync" -namespace win32functions -pass;
$winapi::showwindowasync([int]$input, 4)

]]},hndl[1][1])


Также на PoSh можно создавать задачи в планировщике, редактировать word/excel документы, читать excel по строкам, столбцам, книгам, менять значения в реестре, можно использовать классы и методы .Net, писать в нем на c#...в общем всего не перечислить, а большинство повседневных задач решаются в паре строчек кода.

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


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 23.3.2020, 18:41
Сообщение #2


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 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"
res=PScode('return',{[[#}

$return=get-process

]]})
log(res)


Пример использования input:
15/4
Код
--lua
require "luaposh"
local a, b = 15, 4
res=PScode('return',{[[#}

$return=$input / $input1

]]},a,b)
log(res)


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 24.3.2020, 20:46
Сообщение #3


*****

Journeyman
Сообщений: 349
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 2149
Пользователь №: 18.346
Возраст: 25



Прыыыкона.
Ток пытался погуглить чо за Lua Posh список команд посматреть да примеры какие но толком ничего не нашол
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 24.3.2020, 21:36
Сообщение #4


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 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";PScode('void',{[[#}

for($i = 0;$i -lt (Get-Content C:\1.txt).count;$i++){#}
    $res+= [regex]::Matches(((Get-Content C:\1.txt)[$i]), '(?<=\w\s).+').value+":nnnnnn|";
    $res+=([regex]::Matches(((Get-Content C:\2.txt)[$i]), '(?<=\w\s).+').value -replace " ",":")+"|";
    $res+= [regex]::Matches(((Get-Content C:\3.txt)[$i]), '(?<=\w\s).+').value;
    $res >>C:\4.txt;$res=$null
}C:\4.txt

]]})


Описывай свою задачу, или задавай, какие есть, вопросы, постараюсь дать ответ. А список всех команд есть на msdn.


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 27.3.2020, 14:10
Сообщение #5


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Как он может решить задачу findcolor/findimage?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.3.2020, 14:13
Сообщение #6


**********

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



Цитата
Как он может решить задачу findcolor/findimage?

Никак. Таких функции у винды нет.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 27.3.2020, 15:43
Сообщение #7


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 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


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 30.3.2020, 18:48
Сообщение #8


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 18.746



LuaPosh V2
  • Добавил prompt. Вроде того, что был на пилоте. Пока только текстовое поле.
    Прикрепленное изображение
    text_prompt "Text:"

    Запрос на ввод значения для примера №1.
    Код
    --lua
    require "LuaPoSh"
    PScode('void',{[[#}

    [regex]::Matches((Get-Content (text_prompt "Путь к исходнику:")), '<!--.+?-->').value >(text_prompt "Куда сохранить?")

    ]]})
    Совет:
    Имейте в виду, что путь для сохранения будет запрошен первым, хоть и находится в конце кода. Что бы избежать ошибок, не стоит использовать одинаковые подсказки для prompt( или смотрите следующий пример).
    [regex]::Matches(Get-Content (text_prompt "Путь:"), '<!--.+?-->').value >(text_prompt "Путь:")

    В следующем примере введеные данные из запроса сначала будут занесены в переменные.
    Кстати, при такой записи мы точно знаем порядок запросов, и можем использовать одинаковые подсказки.
    Код
    --lua
    require "LuaPoSh"
    PScode('void',{[[#}

    $pathIN= text_prompt "Путь:"
    $pathOUT=text_prompt "Путь:"
    [regex]::Matches((Get-Content $pathIN), '<!--.+?-->').value >$pathOUT

    ]]})

    Можно в любом месте скрипта просто сделать запрос данных для дяльнейшего использования.
    Код
    --lua
    require "luaposh"
    -- код
    a=PScode('return',{[[#}$return=text_prompt]]})
    log(a)
    -- код
    -- В переменной a находятся введенные данные.


  • Добавил возврат информации об ошибке. По умолчанию возвращаются только прерывающие ошибки.
    Например, проверим, запущен ли калькулятор, но допустим ошибку в имени команды.
    Цитата
    --lua
    log "clear"
    require "luaposh"
    Calc=PScode('return',{[[#}

    if(Get-PrUocess win32calc){$return=$true}
    else{$return=$false}

    ]]})
    log(Calc)

    В ответ получим:
    Код
    Get-PrUocess : Имя "Get-PrUocess" не распознано как имя командлета, функции, файла сценария или выполняемой программы. 
    Проверьте правильность ...
    Теперь сразу понятно где надо исправить опечатку.


  • Булен будет возвращаться как string со значениями 'true' или 'false'.
    Код
    --lua
    require "luaposh"
    Calc=PScode('return',{[[#}

    if(Get-Process win32calc){$return=$true}
    else{$return=$false}

    ]]})
    if Calc=='true' then
        log("Калькулятор запущен!")
    end
Архив с обновлением в первом посте.


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 13.4.2020, 1:21
Сообщение #9


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 18.746



LuaPosh V3

  1. Цитата(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)"                              # Переместить курсор в найденную точку

    ]]})

    Если где-то посреди скрипта вам понадобилось воспользоваться функцией пилота по поиску цвета(или любой другой), то теперь это стало возможным.

  2. Подключил вывод консоли напрямую к логу. Раньше данные можно было получить только после окончания
    работы блока 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

  3. Добавил определение статуса нажатых клавиш.
    Пример ожидания клика левой кнопкой мышки. Запустите скрипт, подождите, и потом кликните мышкой в любое место.
    Код
    --lua
    log"clear";log"mode compact"
    require "luaposh";PScode('return',{[[#}

    Get-KeyState 1
    while(!(Get-KeyState 1) -and (on)){sleep -m 100} # Ожидаем клик ЛКМ

    ]]})
    msg("Хватит кликать !")

  4. Добавил возможность обращаться к элементарным функциям winApi в одну строку. Протестировал функции из следующего примера. Как будет работать с другими - проверяйте, пишите результат.
    1. Запустить калькулятор
    2. Свернуть калькулятор
    3. Развернуть калькулятор
    4. Сместить курсор на 500 вправо, и на 230 вниз
    5. Закрыть калькулятор
    Код
    --lua
    log"clear";log"mode compact"
    require "luaposh";PScode('return',{[[#}

    winapi 'ShellExecute(int 0,string "open",string "calc.exe",string "",string "",int 1)' shell32.dll
    sleep 2
    $hndl=(Get-Process *calc*).MainWindowHandle  # Получаем хэндл запущенного калькулятора
    winapi "ShowWindowAsync(IntPtr $hndl, int 2)"
    sleep 1
    winapi "ShowWindowAsync(IntPtr $hndl, int 4)"
    sleep 1
    winapi "mouse_event(int 1, int 500, int 230, int 0, int 0)"
    sleep 1
    winapi "SendMessage(int $hndl,int 16, int 0,int 0)"

    ]]})

    Имена функций регистрозависимы.
  5. Дополнительно.
    Для корректного отображения таблиц в логе, нужно открыть настройки пилота-> Выбрать шрифт лога-> Lucida Console.
    Для каждого цикла в конце добаляйте условие (on). Это видно в примерах данного поста. Это нужно для того, что бы цикл останавливался, если вы нажали стоп в пилоте.
Архив с обновлением в первом посте.

Сообщение отредактировал Fors1k - 15.6.2020, 16:43


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 14.4.2020, 1:16
Сообщение #10


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 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. Цвет текста.


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 14.4.2020, 11:49
Сообщение #11


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Ладно. С многопоточкой твой LuaPosh точно не справится)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 14.4.2020, 11:59
Сообщение #12


**********

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



Цитата
С многопоточкой твой LuaPosh точно не справится

Она и не нужна, таймеры пригодились бы...
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 14.4.2020, 15:52
Сообщение #13


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 18.746



Цитата(cirus @ 14.4.2020, 11:59) *

таймеры пригодились бы...

Да я думаю можно будет сделать)
Цитата(Levo222 @ 14.4.2020, 11:49) *

С многопоточкой твой LuaPosh точно не справится)

С чего такие предположения?)


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 14.4.2020, 16:42
Сообщение #14


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 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


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 17.4.2020, 18:47
Сообщение #15


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 18.746



LuaPosh V4
Добавил таймеры. Таймер выполняет заданный код через определенные интервалы времени.


В следующем примере представлен скрипт с тремя "потоками".
Первый следит за кликами левой кнопкой миши.
Второй следит за нажатием на пробел.
Третий - основной поток, он просто считает.
Код
--lua
log "clear";require "luaposh";PScode('return',{[[#}

Get-KeyState 1                                   # пропускаем клик при запуске скрипта

# Поток 1
Start-Timer @"
if ((Get-KeyState 1)){#}                         # отслеживаем нажатие левой кнопки мыши
    msg_box "Нажата левая кнопка мыши"           # действия таймера
    log "ЛКМ"                                    # действия таймера
}
"@ 500                                           # интервал выполнения 500 ms

Get-KeyState 20                                  # пропускаем пробел, нажатый до запуска

# Поток 2
Start-Timer @"
if ((Get-KeyState 20)){#}                        # отслеживаем нажатие пробела
    msg_box "Нажат пробел"                       # действия таймера
    log "ПРОБЕЛ"                                 # действия таймера
}
"@ 500                                           # интервал выполнения 500 ms
# Основной поток
while((on)){#}
    log ("Я просто считаю: "+$i++)
    sleep -m 250
}
]]})
Добавлен вывод сообщений на экран. Msg_box "text"



Архив с обновлением в первом посте.


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 18.4.2020, 14:07
Сообщение #16


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 18.746



Демонстрация вывода данных в лог
ping.exe


Кстати, если команде log передать вторым параметром "1", это поможет визуально отделить одни данные от других.
Код
--lua
log"clear";log"mode compact"
require "luaposh";PScode('return',{[[#}

log (ping ya.ru) 1
log (ping uokit.com)

]]})


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fire73
сообщение 21.4.2020, 18:21
Сообщение #17


**

Neophyte
Сообщений: 34
Регистрация: 5.6.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.343
Возраст: 23



Доброго времени суток!

Подскажите, как с его помощью получить из файла все слова, которые начинаются на "@"?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 21.4.2020, 18:43
Сообщение #18


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 18.746



Цитата(Fire73 @ 21.4.2020, 18:21) *
Подскажите, как с его помощью получить из файла все слова, которые начинаются на "@"?
Код
--lua
log"clear";log"mode compact"
require"luaposh";PScode('return',{[[#}

$path= "C:\1.txt"
log ([regex]::Matches((Get-Content $path), '@\S+').value)

]]})


--------------------
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fire73
сообщение 21.4.2020, 19:28
Сообщение #19


**

Neophyte
Сообщений: 34
Регистрация: 5.6.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.343
Возраст: 23



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

Код
--lua
log"clear";log"mode compact"
require"luaposh";PScode('return',{[[#}

$path= "C:\1.txt"
log ([regex]::Matches((Get-Content $path), '@\S+').value)

]]})



Отлично. То, что надо)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 23.4.2020, 20:54
Сообщение #20


*****

Старший модератор UO Pilot
Сообщений: 386
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 2039
Пользователь №: 18.746



Небольшие изменения и исправления.



Архив с обновлением в первом посте.


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

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

 

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