Ru-Board.club
← Вернуться в раздел «Программы»

» Indigo Rose AutoPlay Media Studio

Автор: Octanium
Дата сообщения: 19.12.2015 20:52
Всем доброго времени суток!

Нужно выполнить ADB (ADB - Android Debug Bridge, консольная утилита для отладки андроид устройств), допустим выполнить "adb_answer = File.Run(adbexe, "shell getprop ro.product.model", "", SW_SHOWNORMAL, true);", и в итоге получить ответ в переменной "adb_answer", в виде модели смартфона, а не код завершения работы приложения.

Как это можно осуществить?

AMS 8.5.0.0, желательно без применения плагинов.

Заранее спасибо!
Автор: KerberX
Дата сообщения: 19.12.2015 20:56
AntiWinLockerLive
Вот мой самописный пример.
[more]
Допустим был такой файл (редактор HxD).


Код: local sFilePath = "Image.png";
-- Открываем файл одновременно и для чтения и для записи (r+) и получаем его дескриптор
local hFile = io.open(sFilePath, "r+");
-- Если файл открылся, то продолжаем
if hFile ~= nil then
    -- Напрмер, хотим считать заголовок файла. Это 4 байта со значением "0x89 0x50 0x4E 0x47".
    local sHeader = hFile:read(4);
    print(sHeader);
    -- Функция считает их и возвратит как строку "‰PNG". Чтобы получить HEX значение используется функция string.byte();
    --[[
        Функция string.byte(sString, n1, n2); принимает три аргумента:
        sString: Строку для преобразования
        n1: Индекс первого символа в строке
        n2: Индекс последнего символа.

        Если n1 и n2 не указаны, то n1 = 1, а n2 = n1; и возвращается значениее первого символа.
        Если указаны границы, то возвращаются числовые коды симвлов в указанном диапазоне
    --]]

    -- Так как функция возвращает несколько переменных (4 в дангом случае), то лучше собрать их в таблицу используя следующую конструкцию
    -- Начиная с Lua 5.2 можно использовать функцию table.pack(...) для этого. AMS использет версию 5.1
    local tHeader = {string.byte(sHeader, 1, 4)};
    -- Выводим то что получилось используя table.concat(t, sep, n1, n2); Эта функция собирвет таблицу в строку.
    print(table.concat(tHeader, ", "));
    -- Возможно лучше вывести числа в шетснадцатеричной форме, а не в десятичной. Придётся использовать цикл.
    print("\r\n");
    -- string.format(); со строкйо формата "%02X" выводит HEX значения. Если поменять "X" на "x", то буквы в HEX цифрах будут строчные. Если убрать "02" не будет нулей в начале.
    for i = 1, #tHeader do
        print(string.format("%02X", tHeader[i]));
    end
    -- Теперь ппоиск и замена. Опредеяем функцию
    local function replace(hFile, sPattern, sRepl)
        -- Функция :seek(); меняет положение внутреннего курсора, указывающего на место в файле.
        -- Сохраняем предыдущее расположение
        local nOldPos = hFile:seek();
        -- Получаем размер файла
        local nFileSize = hFile:seek("end");
        local nPatternSize = #sPattern;
        for i = 0, nFileSize do
            hFile:seek("set", i);
            local sData = hFile:read(nPatternSize);
            --
            if sData ~= nil then
                if sData == sPattern then
                    hFile:seek("set", i);
                    hFile:write(sRepl);
                end
            end
        end
        hFile:flush();
        -- Возвращаем курсор на место
        hFile:seek("set", nOldPos);
    end
    --
    -- replace(hFile, string.char(0x48, 0x59, 0x73), string.char(0xCC, 0xCC, 0xCC));
    -- replace(hFile, string.char(0x00), string.char(0xCC, 0xCC));
    replace(hFile, "IH", "DR");
    --
    hFile:close();
end
Автор: Octanium
Дата сообщения: 19.12.2015 21:06
KerberX
File.Run() выбрал только для примера, что-бы было понятна суть вопроса.

И какое это другое место может быть?

Спасибо.
Автор: KerberX
Дата сообщения: 19.12.2015 21:07
Octanium
Откуда мне знать? Кто его знает куда этот твой ADB пишет данные.
Автор: Octanium
Дата сообщения: 19.12.2015 21:25
KerberX

В консоль командной строки.

Ладно буду пилить функцию.
Автор: AntiWinLockerLive
Дата сообщения: 19.12.2015 21:37
KerberX
Благодарю за помощь.
Буду пробовать.

Вот еще вопрос...
Есть консольная утилитка, которая умеет генерировать уникальный guid
при запуске без ключа выводится в консольное окно guid
как мне считать данное сообщение?
можно конечно в файл сохранять, а потом считывать, но может есть более красивое решение...
Автор: KerberX
Дата сообщения: 19.12.2015 21:52
AntiWinLockerLive
Я нашёл этот вариант в интернете.
sCmd - Команда запуска (можно вместе с аргументами).
bRaw - Без обработки вывода (очистка ото всяких переводов строки и т. п.).

Octanium, тебе это тоже пригодится.


Код: function os.capture(sCmd, bRaw)
    local f = assert(io.popen(sCmd, "r"));
    local s = assert(f:read("*a"));
    f:close();
    if bRaw == true then
        return s;
    else
        s = string.gsub(s, "^%s+", "");
        s = string.gsub(s, "%s+$", "");
        s = string.gsub(s, "[\n\r]+", " ");
        return s;
    end
end

local s = os.capture("cmd.exe help dir exit");
Автор: AntiWinLockerLive
Дата сообщения: 19.12.2015 22:22
KerberX
Для меня данный код не особо понятен.

Я сделал так:

Код: File.Run(_SystemFolder.. "\\cmd.exe", "/c \"guid.exe >>guid\"", "AutoPlay\\Plugins\\Resource", SW_HIDE, true)
tGUID = TextFile.ReadToTable("AutoPlay\\Plugins\\Resource\\guid");
GUID = tGUID[1]
Автор: Octanium
Дата сообщения: 19.12.2015 23:11
KerberX

Спасибо огромное, как раз то что нужно! (правда я прочитал сообщение после того как уже реализовал все по своему , немного криво но выводит в виде таблицы)

Буду юзать ваш способ, мне кажется он стабильней =)
Автор: KerberX
Дата сообщения: 19.12.2015 23:40
AntiWinLockerLive
Скинь мне твою утилиту и я посмотрю.
Автор: AntiWinLockerLive
Дата сообщения: 20.12.2015 08:15
В общем, это генератор guid строки...
Запускается без ключей.
Выводится в консольное окно новый guid
Ссылка
Автор: KerberX
Дата сообщения: 20.12.2015 13:10
AntiWinLockerLive
Надо сделать вот так. В sGUID и будет то что нужно.

Код: local sGUID = os.capture("guid.exe", false);
Автор: AntiWinLockerLive
Дата сообщения: 20.12.2015 13:17
ООО сейчас попробую.
А кавычки как срезать слево справо?
Я так сейчас делаю:

Код: GUID = String.Replace(GUID, "{", "", false);
GUID = String.Replace(GUID, "}", "", false);
Автор: KerberX
Дата сообщения: 20.12.2015 13:19
Так.

Код: local sGUID = string.match(sGUID, "{(.+)}");
Автор: AntiWinLockerLive
Дата сообщения: 20.12.2015 13:28
вписал строку, а у меня ошибка...

Код: local sGUID = os.capture("guid.exe", false);
Автор: KerberX
Дата сообщения: 20.12.2015 13:29
А ты саму функцию то скопировал в проект?
Автор: AntiWinLockerLive
Дата сообщения: 20.12.2015 13:31
это как? и где ее взять?
Я с lua не очень...

За строчку Спасибо.
local sGUID = string.match(sGUID, "{(.+)}");
Заменила мои две...
Автор: KerberX
Дата сообщения: 20.12.2015 13:36
AntiWinLockerLive
А это тогда что?

Код: function os.capture(sCmd, bRaw)
local f = assert(io.popen(sCmd, "r"));
local s = assert(f:read("*a"));
f:close();
if bRaw == true then
return s;
else
s = string.gsub(s, "^%s+", "");
s = string.gsub(s, "%s+$", "");
s = string.gsub(s, "[\n\r]+", " ");
return s;
end
end
Автор: AntiWinLockerLive
Дата сообщения: 20.12.2015 13:38
не дошло сразу... не волшебник... только учусь...
Благодарю! Работает!

Только вот, консольное окно на секунду появляется...
Автор: Pahuchiy1
Дата сообщения: 26.12.2015 12:16
Приветствую. Требуется возможность копирования всех вложенных ПУСТЫХ папок. File.Copy копирует только непустые папки. Как вариант - класть в каждую папку по файлику, но это изврат. Хочется красивого решения. Спасибо.
Автор: KerberX
Дата сообщения: 26.12.2015 15:06
Pahuchiy1

Код: function Folder.CopyEmpty(sSource, sDestination)
    local tAllFolders = Folder.Find(sSource, "*", true, nil);
    local tEmptyFolders = {};
    if tAllFolders ~= nil then
        for x, y in pairs(tAllFolders) do
            local tFiles = File.Find(y, "*", false, false, nil, nil);
            if tFiles == nil then
                tEmptyFolders[#tEmptyFolders+1] = y;
            end
        end
        --
        if #tEmptyFolders ~= 0 then
            for x, y in pairs(tEmptyFolders) do
                local sPath = string.format("%s\\%s", sDestination, String.TrimLeft(String.Replace(y, sSource, "", false), "\\"));
                Folder.Create(sPath);
            end
        end
    end
end
Автор: Pahuchiy1
Дата сообщения: 26.12.2015 15:28
прошу прощенья, я не правильно написал. Я имел ввиду: Требуется возможность копирования всех вложенных (в том числе ПУСТЫХ) папок и файлов.
Тоесть, функция полностью идентичная File.Copy, но копирующая в том числе и пустые папки.
Автор: KerberX
Дата сообщения: 26.12.2015 16:56
Pahuchiy1
Как вариант можешь выполнять Folder.CopyEmpty() после File.Copy();
Автор: Pahuchiy1
Дата сообщения: 26.12.2015 21:48
попробую, спасибо.
Когда запускаю через AMS PowerShell файл: File.Open("C:\\temp_ps.ps1", "", SW_SHOWNORMAL) скрипт не выполняется (окно консоли мелькнуло). Когда запускаю вручную -выполняется. В чём может быть проблема?
Автор: KerberX
Дата сообщения: 26.12.2015 22:00
Pahuchiy1
Возможно надо явно указать рабочую папку.
Автор: Pahuchiy1
Дата сообщения: 27.12.2015 13:55
помогите сделать в Paragraph (или ещё где) раскраску синтаксиса Lua как в редакторе скриптов. Если в природе такое существует, конечно....
Автор: KerberX
Дата сообщения: 27.12.2015 14:14
Pahuchiy1
Вот что я нашёл: https://yadi.sk/d/4jYymUO-mX53P

Lua to BBCode - это скомпилированный проект для Setup Factory. Делает то же самое что и этот сайт.
Scintilla.apz и Scintilla.zip - два разных проекта со специальным плагином для подсветки синтаксиса.
ScriptOMatic - создает скрипт обращения ко всем свойствам выбранного WMI-класса. Там тоже есть редактор с подсветкой.

Также был проект с подсветкой синтаксиса в объекте RichText, но я не смог найти его. Впрочем его было не очень удобно использовать, насколько я помню.
Автор: Pahuchiy1
Дата сообщения: 27.12.2015 14:44
KerberX
спасибо.
Когда пользуюсь Page.SetObjectZOrder объекты (грид, инпут) ведут себя странно. В зависимости от положения курсора часть нижнего объекта может визуально и функционально проступать сквозь верхний, ощущение что как будто глюк какой-то. Сборка - русифицированная Киндли. Есть мысли как исправить?
Автор: KerberX
Дата сообщения: 27.12.2015 14:47
Pahuchiy1
А что сверху накладываешь? Image или там Paragraph? Input, Grid и другое подобные объекты имеют WindowHandle (то есть являются окнами), и они всегда будут перекрывать объекты, которые его не имеют.
Автор: Pahuchiy1
Дата сообщения: 27.12.2015 19:14
KerberX только грид и инпут, либо два грида, больше ничего

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980

Предыдущая тема: память не может быть written


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.