|
LuaPosh, Новые возможности пилота |
|
|
Fors1k |
23.3.2020, 18:20
|

    
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 229
Пользователь №: 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 килобайт )
Кол-во скачиваний: 999
--------------------
Для связи
|
|
|
|
|
  |
Ответов
DarkMaster |
2.6.2024, 21:56
|
          
Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29618
Пользователь №: 11.279

|
Уважаемый фонарик... Как же вы уметете невзначай проходя мимо задать на первый взгляд простой и наивный вопрос и вынести этим весь мозг. Без вас было бы скучно. подгружать через require вызов: Код local hint = require"hint" hint(text, size, pos_x, pos_y, width, height, timeout)
В рамках пилота есть особенность - окно хинта закроется только после таймаута, даже если скрипт уже остановлен. Особенности реализации пилота. В чистом луа такого поведения нет. hint
Код --lua local ffi = require 'ffi' local C = ffi.C ffi.cdef [[ typedef struct lua_State lua_State; lua_State *luaL_newstate(); void Sleep(unsigned int dwMilliseconds); void luaL_openlibs(lua_State *L); int luaL_loadstring (lua_State *L, const char *s); void lua_call (lua_State *L, int nargs, int nresults); ]]
local lua_code = [=====[ local mega_f = function(...) local ffi = require("ffi") local C = ffi.C
ffi.cdef[[ typedef void* HANDLE; typedef void* HWND; typedef void* HINSTANCE; typedef unsigned int UINT; typedef int BOOL; typedef const char* LPCSTR; typedef long LONG; typedef unsigned int DWORD; typedef unsigned long long UINT_PTR; typedef void* LPVOID; typedef void* HMODULE; typedef int (__stdcall *THREAD_START_ROUTINE)(LPVOID lpThreadParameter); typedef UINT_PTR (__stdcall *TIMERPROC)(HWND, UINT, UINT_PTR, DWORD); typedef unsigned int WPARAM; typedef long LPARAM; typedef void* HFONT;
HWND __stdcall CreateWindowExA( LONG dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, LONG dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, void* hMenu, HINSTANCE hInstance, void* lpParam );
BOOL __stdcall ShowWindow( HWND hWnd, int nCmdShow );
BOOL __stdcall UpdateWindow( HWND hWnd );
int __stdcall MessageBoxTimeoutA( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType, UINT wLanguageId, UINT dwMilliseconds );
BOOL __stdcall DestroyWindow( HWND hWnd );
DWORD __stdcall GetCurrentThreadId();
HMODULE __stdcall GetModuleHandleA( LPCSTR lpModuleName );
HANDLE __stdcall CreateThread( void* lpThreadAttributes, size_t dwStackSize, THREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, DWORD* lpThreadId );
BOOL __stdcall CloseHandle( HANDLE hObject );
UINT_PTR __stdcall SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc );
BOOL __stdcall KillTimer( HWND hWnd, UINT_PTR uIDEvent );
typedef struct { int x; int y; } POINT;
typedef struct { HWND hwnd; UINT message; uintptr_t wParam; intptr_t lParam; DWORD time; POINT pt; } MSG;
typedef intptr_t LRESULT;
typedef struct { uint32_t size; uint32_t pos_x; uint32_t pos_y; uint32_t width; uint32_t height; uint32_t timeout; const char* text; } HintStruct;
BOOL __stdcall GetMessageA( MSG* lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax );
BOOL __stdcall TranslateMessage( const MSG* lpMsg );
LRESULT __stdcall DispatchMessageA( const MSG* lpMsg );
int __stdcall SendMessageA( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
HFONT __stdcall CreateFontA( int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, unsigned long fdwItalic, unsigned long fdwUnderline, unsigned long fdwStrikeOut, unsigned long fdwCharSet, unsigned long fdwOutputPrecision, unsigned long fdwClipPrecision, unsigned long fdwQuality, unsigned long fdwPitchAndFamily, LPCSTR lpszFace );
void Sleep(unsigned int dwMilliseconds);
static const int WM_SETFONT = 0x0030;
typedef struct lua_State lua_State; lua_State *luaL_newstate(); void Sleep(unsigned int dwMilliseconds); void luaL_openlibs(lua_State *L); void lua_call (lua_State *L, int nargs, int nresults); typedef int (*lua_CFunction)(lua_State *L); void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n); ]]
local user32 = ffi.load("user32") local kernel32 = ffi.load("kernel32") local Gdi32 = ffi.load("Gdi32.dll") local sleep = C.Sleep
-- Переменная для хранения дескриптора окна с сообщением local previousMessageWindow = nil
local function createWindow(HintStruct) local hwnd = user32.CreateWindowExA( 0, -- dwExStyle "STATIC" , -- lpClassName HintStruct.text, -- lpWindowName 0x80000000, -- dwStyle WS_POPUP HintStruct.pos_x, -- x HintStruct.pos_y, -- y HintStruct.width, -- nWidth HintStruct.height,-- nHeight nil, -- hWndParent nil, -- hMenu nil, -- hInstance nil -- lpParam )
-- Создаем шрифт local hFont = Gdi32.CreateFontA( HintStruct.size, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, "Arial" )
-- Устанавливаем шрифт local res = user32.SendMessageA(hwnd, C.WM_SETFONT, ffi.cast("WPARAM", hFont), 1)
user32.ShowWindow(hwnd, 5) -- SW_SHOW user32.UpdateWindow(hwnd)
return hwnd end
local function createTimer(hwnd, timeout) local timerId = user32.SetTimer(hwnd, 1, timeout, nil) return timerId end
local function destroyTimer(hwnd, timerId) user32.KillTimer(hwnd, timerId) end
local function createWindowAsync(HintStruct) HintStruct = ffi.cast("HintStruct*", HintStruct) -- Если предыдущее окно существует, закрываем его if previousMessageWindow ~= nil then print"_____" user32.DestroyWindow(previousMessageWindow) print"XXXX" previousMessageWindow = nil end
local hwnd = createWindow(HintStruct)
-- Сохраняем дескриптор текущего окна как предыдущий previousMessageWindow = hwnd
if hwnd ~= nil then local timerId = createTimer(hwnd, HintStruct.timeout) -- Set timer for specified timeout
-- Н<вырезано анти-матом>кирующее ожидание событий окна local start = os.clock() while os.clock() - start < HintStruct.timeout / 1000 do local msg = ffi.new("MSG") local result = user32.GetMessageA(msg, nil, 0, 0) if type(result) == 'number' and result > 0 then user32.TranslateMessage(msg) user32.DispatchMessageA(msg) end end
destroyTimer(hwnd, timerId) -- Destroy timer user32.DestroyWindow(hwnd) -- Destroy window
-- Обнуляем дескриптор предыдущего окна, так как оно уже было закрыто previousMessageWindow = nil else print("Failed to create window") end
return 0 end
local function hint(text, size, pos_x, pos_y, width, height, timeout) print(text) print(size) print(pos_x) local HintStruct = ffi.new("HintStruct") HintStruct.text = text HintStruct.size = size HintStruct.pos_x = pos_x HintStruct.pos_y = pos_y HintStruct.width = width HintStruct.height = height HintStruct.timeout = timeout local threadId = ffi.new("DWORD[1]") local threadHandle = kernel32.CreateThread(nil, 0, ffi.cast("THREAD_START_ROUTINE", createWindowAsync), ffi.cast("LPVOID", HintStruct), 0, threadId) kernel32.CloseHandle(threadHandle) return 0 end
]=====]
local create_state = function(text, size, pos_x, pos_y, width, height, timeout) local text = text and tostring(text) or "text" local size = size or 24 local pos_x = pos_x or 0 local pos_y = pos_y or 0 local width = width or 400 local height = height or 200 local timeout = timeout or 5000
print(text) print([[hint(']].. text.."', "..size..", ".. pos_x..", "..pos_y..", ".. width..", "..height..", ".. timeout)
-- Создаем новый объект состояния Lua local state = C.luaL_newstate() -- Загружаем стандартные либы io, math, string и т.д. C.luaL_openlibs(state) -- Загружаем код Lua C.luaL_loadstring(state, lua_code..[[hint(']].. text.."', "..size..", ".. pos_x..", "..pos_y..", ".. width..", "..height..", ".. timeout..[[) return 0 end mega_f()]]) C.lua_call(state, 0, 0)
return 0 end
return create_state
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
фонарик |
4.6.2024, 2:46
|
   
Apprentice
Сообщений: 160
Регистрация: 23.11.2011 Группа: Пользователи Наличность: 0
Пользователь №: 14.305

|
Цитата(DarkMaster @ 2.6.2024, 21:56)  подгружать через require вызов: Код local hint = require"hint" hint(text, size, pos_x, pos_y, width, height, timeout)
ААаааАаа (IMG: style_emoticons/default/yahoo.gif) ААабалдеть, хинт человеческий подъехал, вот етадааа (IMG: style_emoticons/default/thumb.gif) Как же его не хватало, вы просто не представляете! Товарищ DarkMaster, Вы просто Маэстро! (IMG: style_emoticons/default/hi.gif) Хинт теперь и на луа это так здорово! (IMG: style_emoticons/default/thanks.gif) Теперь то я заставлю свой скрипт всё мне рассказать и показать наглядно, что он там себе думает (IMG: style_emoticons/default/biggrin.gif) Единственно чего не хватает, так это цветовых настроек, хотя бы шрифта (IMG: style_emoticons/default/rolleyes.gif) Или авто ширины и высоты (IMG: style_emoticons/default/biggrin.gif) Но это уже наверно наглость (IMG: style_emoticons/default/blush.gif) Цитата(DarkMaster @ 2.6.2024, 21:56)  Уважаемый фонарик... Как же вы уметете невзначай проходя мимо задать на первый взгляд простой и наивный вопрос и вынести этим весь мозг. Без вас было бы скучно. Я ведь не специально, оно само как-то получается (IMG: style_emoticons/default/unsure.gif)
|
|
|
|
Сообщений в этой теме
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.6.2024, 5:16 DarkMaster --lua
local ffi = require 'ffi'
local C = ... 3.6.2024, 11:14 DarkMaster
не дались оно мне сразу. часа 3 просидел перед ре... 4.6.2024, 6:00 фонарик А можно как-нибудь посчитать в пикселях, сколько б... 6.6.2024, 23:06 DarkMaster можно. для этого есть спец функция в апи. тебе оно... 7.6.2024, 18:03 dron4938 Перестаёт работать поиск изображений. Если в код д... 4.2.2025, 14:32
7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0
|
|