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

» Autoplay Media Studio

Автор: lerik2703
Дата сообщения: 08.09.2010 10:42
lorents
а такой вариант не подойдет? Как получить дескриптор консольного окна (HWND)
Автор: lorents
Дата сообщения: 08.09.2010 12:30
lerik2703
надо попробовать, правда у меня мало опыта в этих делах, спасибо.
Автор: tavria2
Дата сообщения: 08.09.2010 12:58
lerik2703

Цитата:
а такой вариант не подойдет?

Нет, не пойдет. Это будет работать, если конасольное окно в одном процессе с приложением из которого оно вызвано, а нас получаются разные процессы.
Проверить легко - вызвать из проекта консольное окно, а затем закрыть проект - консольное окно останется.
Автор: MISHANCHYK
Дата сообщения: 08.09.2010 13:08
Подскажите пожалуйста.
Использую AutoPlay Media Studio - Kindly 8.0.2.0 Trial. Так вот при создании одного исполняемого файла и назначении для него иконки, иконка этого файла остаётся всё-равно стандартная, хотя при его запуске на панели задач отображается именно та иконка, которую я назначил.
Это связано с Trial, или какой-то глюк?
Автор: tavria2
Дата сообщения: 08.09.2010 19:28
lorents
Есть один вариант получить дескриптор консольного окна, только если оно запущено с параметром WaitForReturn=false;, т.е. без ожидания завершения.
Если устроит могу кинуть.
Автор: lorents
Дата сообщения: 08.09.2010 19:38
tavria2
объясни, пожалуйста, в чем различие если это параметр true?
кинь пожалуйста, я посмотрю

Добавлено:
Подскажите, можно ли вызвать такое окно через AMS средствами API?

Автор: tavria2
Дата сообщения: 08.09.2010 19:55
lorents

Цитата:
объясни, пожалуйста, в чем различие если это параметр true?

Если WaitForReturn=true, то выполнения lua-скрипта приостанавливается пока не завершится работа запущенной программы, т.е. скрипт после строки запуска программы не выполняется пока не отработает программа, ну а если false, то программа запускается и скрипт продолжает выполняться.

Код: function GetListConsoles()
local tRes = {};
local hWnd = 0;
local sClass = "ConsoleWindowClass";
repeat
hWnd = tonumber(DLL.CallFunction("user32.dll", "FindWindowExA", "0,"..hWnd..",\""..sClass.."\",0", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL));    
if (hWnd ~= 0) then tRes[hWnd] = true; end
until hWnd == 0;
return tRes
end

function GetConsoleHandle(tList)
local nRes = -1;
local hWnd = 0;
local sClass = "ConsoleWindowClass";
repeat
hWnd = tonumber(DLL.CallFunction("user32.dll", "FindWindowExA", "0,"..hWnd..",\""..sClass.."\",0", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL));    
if (hWnd ~= 0) and (not tList[hWnd]) then nRes = hWnd; break end
until hWnd == 0;
return nRes
end

-- Получаем список всех открытых консольных окон в системе
-- до открытия нашего консольного окна
tListConsoles = GetListConsoles();
-- Запускаем bat-файл без ожидания завершения работы
Shell.Execute("C:\\test.bat", "open", "", "", SW_HIDE, false);
-- Пауза, чтобы успело создаться консольнон окно
Application.Sleep(100);
-- Получаем дескриптор нашего консольного окна
-- Если не удалось получить дескриптор, то возвращает -1
hWnd = GetConsoleHandle(tListConsoles);
Автор: Zloy_Gelud
Дата сообщения: 08.09.2010 20:07
lorents
Это самописное диалоговое окно. Такое средствами API не создать. Можно теоретически сделать вызов DialogEx с таким же размещением объектов, а отображение текущих иконок папок в объекте Tree теоретически можно сделать средствами плагина Memory и API.
Автор: lorents
Дата сообщения: 08.09.2010 20:11
tavria2
Супер, спасибо!
Мне очень стыдно тебя просить, но можешь сделать еще выключение bat, очень тебя прошу.
Автор: tavria2
Дата сообщения: 08.09.2010 20:18
lorents

Цитата:
Мне очень стыдно тебя просить, но можешь сделать еще выключение bat, очень тебя прошу.

Что, написать за тебя: Window.Close(hWnd, CLOSEWND_SENDMESSAGE); ?
Автор: lorents
Дата сообщения: 08.09.2010 20:22
Zloy_Gelud
понятно. это слишко сложно пока для меня.

tavria2, Zloy_Gelud, lerik2703 и всем участником форума.
Я сейчас пытаюсь сделать GUI версию, программы по оптимизации картинок. GUI версии таких программа практически нет, я знаю только две, и то они только для PNG и качество оптимизации желает лучшего. Я хотел предложить присоединиться ко мне в данной работе. Я не предлагаю сидеть со мной и делать все, просто есть вещи которые я не знаю, например как нарисовать такое окно, как на картинке, или получить дескриптор консольного окна.

Добавлено:
tavria2
Я тупой, я решил, что опять надо через API, прошу прошения, большое спасибо!
Автор: tRippinthehead
Дата сообщения: 08.09.2010 22:06

Цитата:
lorents
Это самописное диалоговое окно. Такое средствами API не создать. Можно теоретически сделать вызов DialogEx с таким же размещением объектов, а отображение текущих иконок папок в объекте Tree теоретически можно сделать средствами плагина Memory и API.


Или реализовать это с помощью плагина Explorer.
Автор: Zloy_Gelud
Дата сообщения: 08.09.2010 22:29
tRippinthehead
Может быть.. я кроме плагина Memory ничего не качал, поэтому еще и не знаю какой функционал они дают.
Автор: lorents
Дата сообщения: 08.09.2010 22:35
tRippinthehead
ты про ExplorerTree? Хорошая идея, спасибо.
Скачал я пример с официального сайта, при выключения exe-шника, винда выдает ошибку.
Точно не могу сказать, это мне поможет или нет, надо смотреть но меня напрягает ошибка винды.
Автор: tRippinthehead
Дата сообщения: 09.09.2010 05:58
lorents

Да, в последней версии есть такой баг. Скачай предыдущую, там все ок)
Автор: lorents
Дата сообщения: 09.09.2010 13:43
tRippinthehead
хорошо, я то я уже думал проблема у меня.
Я так и не смог получить такое же дерево как на картинке
Автор: Robby
Дата сообщения: 11.09.2010 10:13
Помогите с кодом. Есть таблица с паролями для распаковки архивов получаемая из текстовго файла. Из таблицы по очереди пароли применятся для распаковки архивов. Нужно подсчитать количество успешно примененных паролей а затем отсортировать таблицу чтобы вначале находились чаще всего используемые, далее менее и в конце не использованные и перезаписать с новым порядком файл с паролями.
Автор: Zloy_Gelud
Дата сообщения: 11.09.2010 13:06
tavria2
Помню ты мне помог с таким же вопросом раньше, а я блин сейчас уже забыл как ты это делал.. Вообщем нужно установить кастомный шрифт в этом коде,.. у меня не получается.

Код: local hDC = String.ToNumber(DLL.CallFunction("user32.dll", "GetDC", hWndScreen, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL));
local hFont = String.ToNumber(DLL.CallFunction("gdi32.dll", "CreateFontA", "8,0,0,0,400,0,0,0,204,0,0,0,0,\"Tahoma\"", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL));
DLL.CallFunction("gdi32.dll", "SelectObject", hDC..","..hFont, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
String.ToNumber(DLL.CallFunction("user32.dll", "CreateWindowExA", "0,\"BUTTON\",\"Описание компонента\",1342177287,10,10,100,100,"..hWndScreen..",0,1000,0", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL));        
DLL.CallFunction("gdi32.dll", "DeleteObject", hFont, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
DLL.CallFunction("user32.dll", "ReleaseDC", hWndScreen..","..hDC, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
Автор: tavria2
Дата сообщения: 11.09.2010 17:56
Zloy_Gelud

Цитата:
Вообщем нужно установить кастомный шрифт в этом коде

Выдрал из своего проекта:

Код: function SysGroupBox(Text, X, Y, W, H)
local hWnd=Application.GetWndHandle()
local nSize = 8;
local WM_SETFONT = 48;     
    
hWnd = DLL.CallFunction("user32.dll", "CreateWindowExA", "0,\"BUTTON\",\""..Text.."\",1073741831,"..X..","..Y..","..W..","..H..","..hWnd..",0,0,0", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
local DC = DLL.CallFunction("user32.dll", "GetDC", hWnd, DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
local GDC = DLL.CallFunction("gdi32.dll", "GetDeviceCaps", DC..",90", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
local MD = DLL.CallFunction("kernel32.dll", "MulDiv", nSize..","..GDC..",72", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
local hFont = DLL.CallFunction("gdi32.dll", "CreateFontA", "-"..MD..",0,0,0,400,0,0,0,0,1,0,0,2,\"Microsoft Sans Serif\"", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);

DLL.CallFunction("user32.dll", "SendMessageA", hWnd..","..WM_SETFONT..","..hFont..",0", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
Window.Show(hWnd);
end
Автор: immotus
Дата сообщения: 11.09.2010 20:49
Подскажите, как во вкладке "Quick Action" объекта, задать функцию для сворачивания окна?

Добвалено:
И можно ли как-нибудь оформить ссылки в виде обычно списка? Как например объект Paragraph и с прозрачным фоном. С объектом Label так можно, но загнать в список его не получается. А остальные виды списков не подходят, да и вроде не позволяют делать прозрачный фон.
Т.е. если нужно сделать список из ссылок на прозрачном фоне, то приходиться для каждой строчки делать новый объект Label. Это муторно и еще приходиться рассчитывать интервалы между строками, чтобы поровней получилось.
Автор: tavria2
Дата сообщения: 12.09.2010 17:50
immotus

Цитата:
Подскажите, как во вкладке "Quick Action" объекта, задать функцию для сворачивания окна?

В "Quick Action" этого не сделать, только скриптом. См. действие Application.Minimize.

Цитата:
И можно ли как-нибудь оформить ссылки в виде обычно списка? Как например объект Paragraph и с прозрачным фоном...

Нельзя.
Автор: immotus
Дата сообщения: 13.09.2010 00:29
tavria2

Цитата:
В "Quick Action" этого не сделать, только скриптом. См. действие Application.Minimize.

А чем Application.Minimize отличается от Window.Minimize? На практике работает и так и так.
Автор: lerik2703
Дата сообщения: 13.09.2010 05:44
immotus

Цитата:
А чем Application.Minimize отличается от Window.Minimize?

Единственная разница что Application.Minimize сварачивает только окно проекта а Window.Minimize может сворачивать любые другие окна (при условии указания дискрептора)
Автор: tavria2
Дата сообщения: 13.09.2010 09:42
immotus

Цитата:
А чем Application.Minimize отличается от Window.Minimize? На практике работает и так и так.

Для проекта в режиме Standard - разницы действительно не будет, а для режима SysTray - будет другое поведение окна.
Автор: immotus
Дата сообщения: 13.09.2010 21:20
Еще вопрос. Какое действие (НЕ В "Quick Action") открывает документ?
Автор: Zloy_Gelud
Дата сообщения: 13.09.2010 21:28
immotus

Код: Shell.Execute("AutoPlay\\Docs\\MyProg.exe", "open", "", "", SW_SHOWNORMAL, false);
-- или
File.Open("AutoPlay\\Docs\\MyText.txt", "", SW_SHOWNORMAL);
Автор: immotus
Дата сообщения: 13.09.2010 21:41
Zloy_Gelud
Испрользовал второй вариант, но разницы не понял.

Как можно открыть задействовать OnClick объекта Label нажатием ЛКМ (левой клавиши мыши) один раз, а не два?
Автор: Zloy_Gelud
Дата сообщения: 13.09.2010 21:54
immotus

Цитата:
разницы не понял

Потому что в данном случае ее нет.

Цитата:
Как можно открыть задействовать OnClick объекта Label нажатием ЛКМ (левой клавиши мыши) один раз, а не два?

Хм. On Click обрабатывает одиночное нажатие ЛКМ, а не двойное? В чем проблема не пойму??
Автор: immotus
Дата сообщения: 13.09.2010 23:05
Zloy_Gelud
Задача сделать так, чтобы 2 объекта Label в 2 строках отображались как одно целое.
Образец:
http://rghost.ru/2618430
Это то что у меня получилось, но есть глюки:
1. Тормозит отображение, т.е. не вторая строка отображается с задержкой - как результат мерцание.
2. Если быстро провести над объектами, то объект не распознает что мышь уже убрана с объекта и цвет не меняется обратно.
3. И для запуска открытия документа, требуется 2 щелчка мышью.

Возможно есть другое решение, нежели "игра" с отображением Visible - On/Off между 6-ю объектами Label. Может кто подсказать?
Автор: Zloy_Gelud
Дата сообщения: 13.09.2010 23:27
immotus
Можно менять цвет Лейбла при наведени курсора мыши и возвращать прежний цвет при снятии курсора мыши с объекта. (события On Enter и On Leave)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140

Предыдущая тема: Media Player Classic - Home Cinema (MPC-HC)


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