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

» Indigo Rose AutoPlay Media Studio

Автор: Pahuchiy1
Дата сообщения: 12.02.2016 12:46
Как можно вывести видео-поток с ip-камеры по rtsp?
Поддерживает ли веб-объект http поток? (пока его не настроил, по этому проверить не могу)
Автор: CoMaster
Дата сообщения: 13.02.2016 16:01
Здравствуйте!

У меня проблема с XML.
Есть файл XML, содержащий текстовые значения на русском языке.
При попытке получить значение, получаю мусор в виде знаков вопроса.

Пример получения значения:
Код: XML.Load("AutoPlay\\Docs\\test.xml");
sText = XML.GetValue("database/ru");
Dialog.Message("Notice", sText);
Автор: KerberX
Дата сообщения: 13.02.2016 16:35
CoMaster
Возможно стоит указать в XML что нужно использовать кодировку Windows-1251.

Код: <?xml version="1.0" encoding="Windows-1251"?>
Автор: CoMaster
Дата сообщения: 13.02.2016 17:48
KerberX
Спасибо большое, ты абсолютно прав!
Автор: Pahuchiy1
Дата сообщения: 14.02.2016 16:38
как получить путь до exe-файла зная его hwnd? Не используя Window.EnumerateProcesses.
Автор: KerberX
Дата сообщения: 14.02.2016 17:37
Pahuchiy1
Вот, держи. Нужен плагин MemoryEx.

Код: function Window.GetFilePath(hWnd)
    local hUser32 = Library.Load("User32.dll", false);
    if hUser32 ~= nil then
        local hProcessBuffer = MemoryEx.Allocate(8);
        MemoryEx.DWORD(hProcessBuffer, 0);
        hUser32.GetWindowThreadProcessId(hWnd, hProcessBuffer);
        local nProcessID = MemoryEx.DWORD(hProcessBuffer);
        MemoryEx.Free(hProcessBuffer);
        --
        if nProcessID ~= 0 then
            local hKernel32 = Library.Load("Kernel32.dll", false);
            local PROCESS_QUERY_INFORMATION = 0x0400;
            local PROCESS_VM_READ = 0x0010;
            local hModule = hKernel32.OpenProcess(PROCESS_QUERY_INFORMATION+PROCESS_VM_READ, 1, nProcessID);
            --
            if hModule ~= 0 then
                local nBufferSize = 1024;
                local nLength = nBufferSize;
                local hBuffer = MemoryEx.Allocate(nBufferSize);
                --
                if hKernel32:GetProcAddress_("GetModuleFileNameExA") == nil then
                    local hPsAPI = Library.Load("Psapi.dll", false);
                    nLength = hPsAPI.GetModuleFileNameExA(hModule, 0, hBuffer, nLength);
                    hPsAPI:Close_();
                else
                    nLength = hKernel32.GetModuleFileNameExA(hModule, 0, hBuffer, nLength);
                end
                --
                hUser32:Close_();
                hKernel32:Close_();
                return MemoryEx.String(hBuffer, nLength, MEMEX_ASCII);
            end
            --
            hUser32:Close_();
            hKernel32:Close_();
        end
    end
end
--
local hWnd = Application.GetWndHandle();
local sPath = Window.GetFilePath(hWnd);
Dialog.Message("", tostring(sPath));
Автор: Pahuchiy1
Дата сообщения: 14.02.2016 17:52
спасибо.

Автор: AntiWinLockerLive
Дата сообщения: 15.02.2016 11:21
KerberX, Возникли вопросы по: 7-ZIP.dll проекту.

1.) Поддерживает ли данная dll установку пароля на архив, ну и распаковку архивов с паролем?
В обвязке нет данной функции... В инструкции не разобрался...
И есть ли альтернатива... dll???
Для InnoSetup (is7z.dll), вроде не умеет сжимать архивы

2.) Требуется подменит 7-ZIP.dll в проекте, но она загружена. Заменить то я физически могу, но она в память загружена и другая dll начинает работать только после перезапуска.
Есть ли в alien функция выгрузки dll
Зачем это требуется: у меня две таких dll одна стандартная, в другой искажены сигнатуры архива (чтобы архиваторы не могли вскрыть 7ZipSFX авхив)
И отключаемая функция в программе (выбор варианта)

3.) Стабильно ли работает данная dll в современных ОС
У меня бывали вылеты.
Нашел одну проблему, не любит когда дескриптор (handle) окна приложения занят каким то еще процессом.
Например в окно программы можно перетаскивать файлы. Приходится отключать функцию перетаскивания на время создания архива.
Вроде стало стабильнее работать, но вылеты случаются, хотя гораздо реже...
Автор: KerberX
Дата сообщения: 15.02.2016 17:55
AntiWinLockerLive
1. Эта DLL использует командную строку 7-Zip так что поддерживает. Нужно добавить опцию "-p{Пароль}" в строку при упаковке и распаковке. Если её не указывать и скормить библиотеке архив с паролем, то она покажет свой диалог для его ввода.

Полнофункциональных альтернатив я не встречал. Разве что сам 7-Zip.

2. Я не нашёл такой возможности. Впрочем наткнулся на это. Вдруг сработает.

3. Не очень. Меньше всего вылетов если не использовать Callback функцию. То есть использовать встроенное окно процесса.
Автор: AntiWinLockerLive
Дата сообщения: 15.02.2016 18:32
1.) А куда конкретно запихнуть?
У меня такая строка:
Archive.Add(hWnd, sArchivePath, sInPath, nCompressionLevel, bRecurse, bSolid, bCallback, sMethod, sExclude)
Тут нет, а хотелось бы...

Нашел вот это:Ссылка Прогресс вроде отображает, правда распаковки... Но до ума не довел...
Автор: KerberX
Дата сообщения: 15.02.2016 18:34
AntiWinLockerLive
Например так.

Код: function Archive.Extract(hWnd, sArchivePath, sOutPath, tFiles, bFullPath, bOverwrite, bCallback, sPassword)
    local sCommand = "";
    if bFullPath == true then
        sCommand = "x -r ";
        --sCommand = "x ";
    else
        sCommand = "e -r ";
        --sCommand = "e ";
    end
    --
    sCommand = sCommand..sQuote..sArchivePath..sQuote.." ";
    if tFiles ~= nil then
        for x, y in pairs(tFiles) do
            sCommand = sCommand..sQuote..y..sQuote.." ";
        end
    else
        return 1;
    end
    --
    if bCallback == true then
        sCommand = sCommand.."-hide ";
    end
    --
    if bOverwrite == true then
        sCommand = sCommand.."-aoa ";
    else
        sCommand = sCommand.."-aos ";
    end
    sCommand = sCommand.." -o"..sQuote..sOutPath..sQuote;
    if sPassword ~= nil then
        sCommand = sCommand.." -p"..sPassword;
    end
    --
    local sUTF8Command = UTF8.ToUTF(sCommand);
    local nRet = Archive.SendCommand(hWnd, sUTF8Command);
    --
    return nRet, sCommand, sUTF8Command;
end
Автор: AntiWinLockerLive
Дата сообщения: 15.02.2016 19:31
Спасибо! Получается.
Автор: AntiWinLockerLive
Дата сообщения: 16.02.2016 17:00

Цитата:
3. Не очень. Меньше всего вылетов если не использовать Callback функцию. То есть использовать встроенное окно процесса.

Тогда вообще нет смысла ее использовать (dll), ну если только что бы скрыть пароль при упаковки- распаковки...
А прогресс можно внешний использовать из 7zG.exe
Если подредактировать файл в редакторе ресурсов, то можно такое окошко сделать:


Есть еще одна проблема с dll ...
Ставлю пароль на архив, все собирается, с паролем открывается, но если слить с SFX модулем,
не выводится окно ввода пароля и дает ошибку, так же не получилось шифровать имена папок,
чтобы без пароля не было видно содержимого... Шифровать возможно (Core.lua Archive.Method["LZMA2"] = "-m0=LZMA2:d=64m -mhe=on ";), но вот совместимости с SFX пока не добился...
Автор: AntiWinLockerLive
Дата сообщения: 17.02.2016 18:04

Цитата:
Ставлю пароль на архив, все собирается, с паролем открывается, но если слить с SFX модулем,
не выводится окно ввода пароля и дает ошибку

KerberX, сталкивался с таким?
Как отследить и в чем проблема, не пойму...
Я где то читал что данная Dll почти тоже что и 7za.exe
Так с 7za.exe (версии 9.22) и такими же параметрами сжатия работает, SFX модуль видит что на архиве пароль и просит ввести.
Автор: KerberX
Дата сообщения: 17.02.2016 18:11
AntiWinLockerLive
Нет, не сталкивался. Я вообще не создавал с её помощью SFX архивы.
Автор: AntiWinLockerLive
Дата сообщения: 18.02.2016 16:58

Цитата:
Ну если так, то может быть подойдёт и имеющаяся Callback функция.

Код:
local function CallbackFind(sCurrentPath)
    Label.SetText("Label1", sCurrentPath);
end

не прокатывает...

Цитата:
Когда находится совпадение, вызывается функция 'found', и поиск заканчивается. Используя вышеуказанный способ, действие File.Find может заканчиваться как только найдено одно совпадение, несмотря на то, сколь много совпадений существует в месте поиска.
Автор: KerberX
Дата сообщения: 18.02.2016 20:09
AntiWinLockerLive
Не нужно так нервничать. Я просто забыл что функция должна возвращать true чтобы поиск продолжался до конца.
Автор: AntiWinLockerLive
Дата сообщения: 18.02.2016 23:12
KerberX, да я не нервничаю, просто хочу сделать отображение, а не получается...
Рабочего примера не нашел...
Я понял что нужно так просто сделать: return true; в функции.
Заработало!!!
Автор: Pahuchiy1
Дата сообщения: 19.02.2016 11:56
при использовании WinApi.GetWindowText приложение стабильно аварийно закрывается через несколько секунд. Хочу попробовать использовать
Цитата:
DLL.CallFunction("user32.dll"....
, но ничего в её аргументах не понимаю. Помогите.

Можно ли как-то при выборе фунции избавится от подстановки
Цитата:
result =
Уже устал каждый раз удалять..
Автор: KerberX
Дата сообщения: 19.02.2016 17:36

Цитата:
Хочу попробовать использовать DLL.CallFunction("user32.dll".... , но ничего в её аргументах не понимаю. Помогите.

Нужен MemoryEx.

Код: function Window.GetText(hWnd)
    if type(hWnd) == "number" and hWnd > 0 then
        local hUser32 = Library.Load("User32.dll", false);
        if hUser32 ~= nil then
            local nLength = hUser32.GetWindowTextLengthA(hWnd);
            if nLength ~= 0 then
                nLength = nLength+1;
                local hBuffer = MemoryEx.Allocate(nLength);
                local WM_GETTEXT = 0x000D;
                local nExactLength = hUser32.SendMessageA(hWnd, WM_GETTEXT, nLength, hBuffer);
                hUser32:Close_();
                --
                return MemoryEx.String(hBuffer, nLength, MEMEX_ASCII);
            else
                hUser32:Close_();
            end
        end
    end
end
Автор: Pahuchiy1
Дата сообщения: 19.02.2016 18:36
KerberX спасибо
абсолютно ламерский вопрос: я уже использовал в коде DLL.CallFunction("user32.dll"... (окошко делал поверх остальных)
без
Цитата:
local hUser32 = Library.Load("User32.dll", false)
и всё работало. Это что может значить? что AMS сама подгрузила user32.dll ?
Автор: KerberX
Дата сообщения: 19.02.2016 18:40
Pahuchiy1
Насколько я знаю DLL.CallFunction() закрывает библиотеку после использования. Да и для вызова функции из DLL требуется явно указать её дескриптор. К тому же нужно же откуда то взяться переменной hUser32. Если не вызвать ту функцию, её не будет и функция не сработает.
Автор: Pahuchiy1
Дата сообщения: 19.02.2016 18:48
KerberX
понятно. А как узнать имя AMS-объекта под курсором?
Автор: KerberX
Дата сообщения: 19.02.2016 18:51
Pahuchiy1
Page.GetFocus() и DialogEx.GetFocus(). Но таким образом можно узнать только об объекте который имеет дескриптор окна (HWND). И мне кажется я уже писал здесь всё это.
Автор: Pahuchiy1
Дата сообщения: 19.02.2016 19:14
не совсем так. Для всего этого нужно кликнуть.
Похоже придётся методом перебора координат всех объектов. Не быстрый скрипт получится...
Автор: Pahuchiy1
Дата сообщения: 21.02.2016 21:11
пытаюсь сделать popup-меню которое бы работало для любых запущенных приложений (для хрома например). Так как стандартное popup-меню для этого не особо заточено, полноценно задумку реализовать не получается. Есть какой-то плагин-альтернатива?
Автор: KerberX
Дата сообщения: 21.02.2016 21:17

Цитата:
popup-меню которое бы работало для любых запущенных приложений

Как это вообще должно выглядеть? Опиши подробнее, или скриншот какой-нибудь покажи.
Автор: Pahuchiy1
Дата сообщения: 21.02.2016 21:25
работаю я себе в хроме, например....и тут захотелось, переслать ссылку на текущую страничку другу.
Я кликаю правой кнопкой и помимо стандартного хромовского меню рядом вылазит меню от АМS с нужным мне пунктом.
Я уже почти всё реализовал...мешает только то что при вызове амэсовского меню прога вылезает наверх перекрывая хром. Это конечно тоже можно обойти, но кривовато выходит.
И попутно ещё вопрос: как расположить окно (приложение) на 1 уровень вверх или вниз по Z?
Автор: KerberX
Дата сообщения: 21.02.2016 21:37

Цитата:
И попутно ещё вопрос: как расположить окно (приложение) на 1 уровень вверх или вниз по Z?

Здесь могу помочь: Window.SetOrder().
Автор: Pahuchiy1
Дата сообщения: 21.02.2016 21:50
есть 3 окна a b c. (a-верхнее) для того чтобы "c" переместить на уровень вверх c помощью Window.SetOrder(). нужно знать что выше него именно "b". То есть, иметь список в правильной последовательности всех hwnd. А где его взять?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980

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


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