misha Опубликовано 19 июня, 2012 Поделиться Опубликовано 19 июня, 2012 Привет всем! Есть ли возможность создать трейнер с полупрозрачным окном?Убрать полностью рамку, заголовок, оставить толькосамо содержимое. Ссылка на комментарий Поделиться на другие сайты Поделиться
ICEBURG Опубликовано 19 июня, 2012 Поделиться Опубликовано 19 июня, 2012 Привет всем!Есть ли возможность создать трейнер с полупрозрачным окном?Убрать полностью рамку, заголовок, оставить толькосамо содержимое.Вобще есть. На чем пишешь? Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 19 июня, 2012 Автор Поделиться Опубликовано 19 июня, 2012 Сорри. забыл указать, что нужно на трейнер СЕ в том то и дело. Ссылка на комментарий Поделиться на другие сайты Поделиться
ICEBURG Опубликовано 19 июня, 2012 Поделиться Опубликовано 19 июня, 2012 Сорри. забыл указать, что нужно на трейнер СЕ в том то и дело.На счет формы, в свойствах самой формы, пункт BorderStyle --> bsNone окно станет без рамки, на счет прозрачности пункт AlphaBlend -- > True и AlphaBlendValue --> 150, а вобще по факту лучше написать свою оболочку на С# или С++ и радоватся жизни. Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 20 июня, 2012 Автор Поделиться Опубликовано 20 июня, 2012 Спасибо, тоже нашел эти стили. И эта прозрачность действует сразу на всю форму, можно ли у отдельных элементов менять это свойство?-----------------------------------------------------------------Оболочку не вопрос, но как её прикрутить к СЕ? Ссылка на комментарий Поделиться на другие сайты Поделиться
ICEBURG Опубликовано 20 июня, 2012 Поделиться Опубликовано 20 июня, 2012 Спасибо, тоже нашел эти стили. И эта прозрачность действует сразу на всю форму, можно ли у отдельных элементов менять это свойство?-----------------------------------------------------------------Оболочку не вопрос, но как её прикрутить к СЕ?На счет отдельных элементов не вкурсе. Про оболочку я имел ввиду написать трейнер с 0 не используя конструктор СЕ, вот в этой теме я скидывал шаблон на патч байтов из СЕ на С++ Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 20 июня, 2012 Автор Поделиться Опубликовано 20 июня, 2012 Мне через СЕ легче реализовать, тк на С++ функции сешные нужно выдумывать, в частности дебаггинг сделал, но недоработал, чтобы по таймеру шло, а СЕшный луа вроде знаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 21 июня, 2012 Поделиться Опубликовано 21 июня, 2012 Чтобы в CE сделать прозрачную форму, то без гемора не получится - нужно1) Бросить на форму картинку, на которой не видимый фон будет белым цветом. У картинки поставить свойство Транспарент в true2) Форме отправить сообщенияSetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);SetLayeredWindowAttributes(Handle,clWhite,255,LWA_COLORKEY);Выполнить этот код на ассемблере, т.е. отрпавить сообщения окну трейнера можно как изнутри процесса Cheat Engine так и, если я не ошибаюсь из любого другого (даже из процесса игры) зная дескриптор формы.В противном случае форму с прозрачными областями на CE не сделать - увы (это вопрос к разработчикам Lazarus или Дарк Байту). На Lazarus-e на котором собран CE увы простыми средствами не сделать прозрачные области кроме как через Win-API. Я пришёл к этому выводу давно, когда разбирался с этим вопросом. Но потом я отказался от прозрачных областей по другим причинам и на асм не переписывал.Так что берёшь среду разработки (любую)... пишешь код на Win-API, ставишь бряк на SetWindowLong, подсматриваешь дизасм-код, копируешь. Добавлешь код поиска дескриптора формы, если надо. Ну и применяешь этот код в как исполняемую инъекцию кода, котоаря делает белый цвет на окне трейнера прозрачным.Ещё можешь поискать готовое решение на официальном форуме CE - мало ли уже есть готовое решение. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 21 июня, 2012 Поделиться Опубликовано 21 июня, 2012 В инициализации достаточно сделать так:invoke SetLayeredWindowAttributes,hWnd,0,180,LWA_ALPHAПодробнее - в [MSDN].Т.е.:push 0x2 //LWA_ALPHApush 0xB4 //180 из 255push 0 //COLORREF = 0push hWnd //Хэндл окнаcall SetLayeredWindowAttributesПеред этим можно дёрнуть нужную функцию из User32.dll:push 'user32.dll'call LoadLibraryИ затем - нужную функцию:push 'setlayeredwindowattributes'push eaxcall GetProcAddressИтого:push hWndpop ebx //Запихиваем хэндл окна в ebx, т.к. этот регистр не используется WinAPI-функциямиpush 'user32.dll'call LoadLibrary //Подгружаем нужную dllpush 'setlayeredwindowattributes'push eax //В eax - хэндл подгруженной user32.lib*call GetProcAddress //Получаем адрес SetLayeredWindowAttributespush 0x2 //LWA_ALPHApush 0xB4 //180 из 255push 0 //COLORREF = 0push ebx //Хэндл окнаcall eax //Вызываем найденную функцию* Если функция не найдётся - возвратит 0 в eax и всё накроется тазиком, так что тут надо быть аккуратнее.Вот, типа того. Возможно, ещё надо что-то нахимичить в RC-файле диалога, но я точно не помню. Опять же, проще через отладчик проверить, грузит ли трейнер себе user32.dll (наверняка грузит).PS: Да, можно или в RC выставить, или через SetWindowLong.PPS: Я не знаю, сработает ли это с любым элементом окна, т.к. все элементы по сути - окна разного типа, так что поиграться можно, передавая разные хэндлы.Проще, имхо, на C# своих контролов набросать. Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 22 июня, 2012 Автор Поделиться Опубликовано 22 июня, 2012 Спасибо, ребята за подробные раз"яснения. Но я так понимаю тут если и вытяну прозрачность, то она будет на статичную облась окна, а если элемент (кнопка) будет постоянно в движении ? Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 22 июня, 2012 Поделиться Опубликовано 22 июня, 2012 Я тут нагуглил, что кнопку можно сделать и вручную (это ведь тоже окно):CreateWindow(L"BUTTON", L"hello", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 100, 100, 100, 100, h, 0, hInst, 0);При этом советуют поиграться со стилем WS_EX_TRANSPARENT, а совсем уж извращенцы создают null-brush и рисуют:SetBkMode(HDC, TRANSPARENT)Предварительно указав кнопку в качестве области рисования. Ящитаю, что такие вещи лучше по-возможности делать на более HLL, вроде плюсов\шарпа\дельфи, но попытаться можно, конечно. Сам я пошёл чуток другим путём - у меня вообще нет кнопок - есть области, клик по которым эти самые кнопки символизирует. Т.е. изначально в качестве фона висит полупрозрачная картинка, на которой нарисована кнопка. Кликаешь в области этой кнопки - область рисуется другим цветом (выделяется) и происходит нужное действие. Всё это висит на обработке WM_LBUTTONDOWN и расчёте координат курсора из wParam и lParam. Не то, чтобы дофига удобно, но я привык.Мне больше интересно, зачем нужна кнопка, которая постоянно меняет свои координаты. Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 22 июня, 2012 Автор Поделиться Опубликовано 22 июня, 2012 Мне больше интересно, зачем нужна кнопка, которая постоянно меняет свои координаты.то кнопку я в пример написал. а так,я хочу создать мини-карту для игры, на ней в режиме реального времени будут перемиещаться враги и союзники. Вот они будут как раз непрозрачными, а остальную форум хочу сделать 50% прозрачности, чтобы играть было удобнее. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 22 июня, 2012 Поделиться Опубликовано 22 июня, 2012 Если это будет полноэкранное приложение - то рисовать поверх него форму - не лучшая затея. Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 22 июня, 2012 Автор Поделиться Опубликовано 22 июня, 2012 Оконная игра. Карту хочу в виде отдельного трейнера. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения