Dark_XSM Опубликовано 19 июля, 2011 Поделиться Опубликовано 19 июля, 2011 (изменено) Извиняюсь за тупой вопрос, но как в LUA работать с формами?С формой созданной в CE-же, с дефолтным названием UDF1События запускают скрипты, это фигня, а как вытащить текст из поля CEdit к примеру?Я уже все известные мне способы перепробовал, либо говорит что неожиданное появление какого-то знака, либо ничего не делает.Я уже 3 часа потратил, в ИНете задолбался рыться, нигде никакой инфы о работе с формами нет.txtBox = component_findComponentByName(UDF1, "CEEdit1")Вот ж блин, почти допёр.Решил завтра её попробовать, а она, оказывается, как раз и есть то, что мне надо. Изменено 19 июля, 2011 пользователем Dark_XSM Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 19 июля, 2011 Поделиться Опубликовано 19 июля, 2011 Извиняюсь за тупой вопрос, но как в LUA работать с формами?С формой созданной в CE-же, с дефолтным названием UDF1Я тоже не знал как это сделать, но посмотрев здесь узнал:Создал дефолтную форму UDF1, едит и кнопку. И повесил обработчик на кнопку при клике (код ниже). При клике в лог выводиться текст из едита:function CEButton1Click(sender) txtBox = component_findComponentByName(UDF1, "CEEdit1") textValue = getProperty(txtBox, "Text") print(textValue)endUDF1 в этом случае это объект формы. Если объект формы неизвестен, то нужно использовать перебор форм по индексам от нуля до количества индексов всех форм связанных с Cheat Engine.getPropertyList(obj_class) создаёт список публичных свойств, среди которых можно найти свойство Text. Можно и не искать таким образом, а поискать названия свойств в дизайнере компонентов. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dark_XSM Опубликовано 19 июля, 2011 Автор Поделиться Опубликовано 19 июля, 2011 Наверно тему лучше было назвать как-то иначе, потому что есть ещё один вопрос, и к формам отношения никакого не имеет.Есть скрипт на LUAОн стартит процесс, открывает его, ловит создание одного адреса(таки допёр как собрать адрес из указателей юзая LUA), и если там появляется цифра 5, меняет её на 6(адрес статичный, в нём тока эта цифра, так что всё ок).А нельзя ли как-нить сделать из этого .exe ? Типа LaunchNPatch.exe Ибо основная идея - сделать эту штуку общедоступной, без использования CEДа, и ещё, вот, собсно, скрипт. Хотелось бы узнать, как можно его улучшитьfunction OpenProcessFunc() if openProcess("process.exe") then timer_onTimer(Timer1, ChangeValue) endendfunction ChangeValue() Address = getAddress("process.exe") Address = Address+0x0051E404 b4,b3,b2,b1 = readBytes(Address,4) Address = string.format("%02x%02x%02x%02x",b1,b2,b3,b4) Address = getAddress(Address) Address = Address+0x24 b4,b3,b2,b1 = readBytes(Address,4) Address = string.format("%02x%02x%02x%02x",b1,b2,b3,b4) Address = getAddress(Address) Address = Address+0xE4 b4,b3,b2,b1 = readBytes(Address,4) Address = string.format("%02x%02x%02x%02x",b1,b2,b3,b4) Address = getAddress(Address) Address = Address+0xA0 Value = readFloat(Address) if (b1 ~= 0) or (b2 ~= 0) or (b4 ~= 0) or (b4 ~= 0) then if (Value == 5) then writeFloat(Address,6) timer_setEnabled(Timer1, false) closeCE() end endendTimer1 = createTimer(nil)timer_setInterval(Timer1,1000)timer_setEnabled(Timer1, true)timer_onTimer(Timer1, OpenProcessFunc)createProcess("DISK:/path/process.exe",nil,nil,nil) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 20 июля, 2011 Поделиться Опубликовано 20 июля, 2011 А нельзя ли как-нить сделать из этого .exe ? Типа LaunchNPatch.exe Ибо основная идея - сделать эту штуку общедоступной, без использования CEМожно сделать сохранив данные как .exe файл из меню главного окна. В этом случае будет автоматически выполняться встроенный Lua-код.Да, и ещё, вот, собсно, скрипт. Хотелось бы узнать, как можно его улучшитьfunction OpenProcessFunc() if openProcess("process.exe") then timer_onTimer(Timer1, ChangeValue) endendfunction ChangeValue() Address = getAddress("process.exe") Address = Address+0x0051E404 b4,b3,b2,b1 = readBytes(Address,4) Address = string.format("%02x%02x%02x%02x",b1,b2,b3,b4) Address = getAddress(Address) Address = Address+0x24 b4,b3,b2,b1 = readBytes(Address,4) Address = string.format("%02x%02x%02x%02x",b1,b2,b3,b4) Address = getAddress(Address) Address = Address+0xE4 b4,b3,b2,b1 = readBytes(Address,4) Address = string.format("%02x%02x%02x%02x",b1,b2,b3,b4) Address = getAddress(Address) Address = Address+0xA0 Value = readFloat(Address) if (b1 ~= 0) or (b2 ~= 0) or (b4 ~= 0) or (b4 ~= 0) then if (Value == 5) then writeFloat(Address,6) timer_setEnabled(Timer1, false) closeCE() end endendTimer1 = createTimer(nil)timer_setInterval(Timer1,1000)timer_setEnabled(Timer1, true)timer_onTimer(Timer1, OpenProcessFunc)createProcess("DISK:/path/process.exe",nil,nil,nil)Можно сделать самый просто вариант, но это не значит что он самый лучший.Предварительно создать запись "MyFloatValue" в главной таблице CE: по шаблону f[[[[process.exe+0x0051E404]+0x24]+0xE4]+0xA0] = 5 Т.е "f" - значение float. [[[[process.exe+0x0051E404]+0x24]+0xE4]+0xA0] - цепочка указателей-- Срабатывает при любом открытии процессаfunction onOpenProcess(processid) local te = getTableEntry("MyFloatValue") -- f[[[[process.exe+0x0051E404]+0x24]+0xE4]+0xA0] = 5 memoryrecord_freeze(te, 0) -- 0=freeze, 1=allow increase, 2=allow decrease while(true) do sleep(500) memoryrecord_unfreeze(te) local value = memoryrecord_getValue(te) if (value == "5") then closeCE() return caFree end memoryrecord_freeze(te, 0) endend listProcess = getAutoAttachList()stringlist_add(listProcess, "process.exe")Цикл который я написал в while обычно не рекоммендуется и заменяется таймером, но это уже на твоё усмотрение. С таймерами ты работать у меешь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dark_XSM Опубликовано 20 июля, 2011 Автор Поделиться Опубликовано 20 июля, 2011 (изменено) А "return caFree" чего делает?И про"создать запись "MyFloatValue" в главной таблице CE:по шаблону f[[[[process.exe+0x0051E404]+0x24]+0xE4]+0xA0]"я не совсем понял.В главной таблице можно создать просто адрес с указателями, а f[[...]+..] для меня загадка(в смысле, понятно что это, но куда это писать?)...upd: файл я создал(exe), но при запуске значения не меняются, да ещё и вылазит вопрос, хочу ли я оставить предыдущую таблицу.Значения так-же не меняются если я запущу CE через process.ct, и соглашусь на выплнение LUA-скрипта.Если сначала запустить CE, а потом скрипт... та же фигня. Процесс сверху вроде тот написан, но значения он не считывает.В списке в полях адресов строки типа [process.exe+490DA6]OpenProcess("process.exe") работает как надо.Ну и вдогонку, щас процесс создаётся через createProcess("DISK:/path/process.exe",nil,nil,nil), а надо что-нить типо createProcess("process.exe",nil,nil,nil)Как это реализовать? Именно такая запись почему-то не работает, даже если exe лежит в папке с... exeПуть-то может быть разный... Изменено 20 июля, 2011 пользователем Dark_XSM Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 21 июля, 2011 Поделиться Опубликовано 21 июля, 2011 <<А "return caFree" чего делает?Такой код генерирует генератор трейнеров. Поэтому я взял это на заметку.function CloseClick() closeCE() return caFree --onclick doesn't care, but onClose would like a resultendЭтот генератор сделал ДаркБайт и только он более точно знает, что делает этот код. Судя по комментариям вызов closeCE() видимо не всегда достаточно. Совершенно точно не скажу, но это вероятно завершение выполнение Lua кода с возвращением кода действия.--CloseAction typescaNone=0;caHide=1;caFree=2;caMinimize=3;caFree, очевидно "точно высвобождает все ресурсы" в том числе и exe-трейнер, таймеры и т.п. Можно проверить на практике, но я этого пока не делал.И про"создать запись "MyFloatValue" в главной таблице CE:по шаблону f[[[[process.exe+0x0051E404]+0x24]+0xE4]+0xA0]"я не совсем понял.В главной таблице можно создать просто адрес с указателями, а f[[...]+..] для меня загадка(в смысле, понятно что это, но куда это писать?)...Такой формат можно задать только в программе MHS. Этот формат довольно удобный и мне удобнее его писать. В CE надо задавать так как позволено.upd: файл я создал(exe), но при запуске значения не меняются, да ещё и вылазит вопрос, хочу ли я оставить предыдущую таблицу.Я свой код не проверял. Я забыл, что при сохранении в exe запись в таблице не сохраняется. Её нужно добавить в генераторе трейнеров из главной таблицы CE и уже обращаться к ней. Попробуй сам разобраться... Ну и вдогонку, щас процесс создаётся через createProcess("DISK:/path/process.exe",nil,nil,nil), а надо что-нить типо createProcess("process.exe",nil,nil,nil)Как это реализовать? Именно такая запись почему-то не работает, даже если exe лежит в папке с... exeПуть-то может быть разный...По-моему путь нужно задавать полный и уж точно через формат двойной косой черты. Попробуй поискать свой ответ здесь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dark_XSM Опубликовано 21 июля, 2011 Автор Поделиться Опубликовано 21 июля, 2011 Я свой код не проверял. Я забыл, что при сохранении в exe запись в таблице не сохраняется. Её нужно добавить в генераторе трейнеров из главной таблицы CE и уже обращаться к ней. Попробуй сам разобраться...Эм... да не, таблица по моему в файле есть, раз он спрашивает оставить ли её. Меня смущает сам факт этого вопроса, ведь если там нажать "No", то и изменений не будет.В общем, я решил, что для exe лучше в самом скрипте адреса считать, что бы не было этого вопроса.Про MHS я не в курсе(таких сокращений дико много, я не представляю о чём речь).По поводу запуска - фиг бы знал.В теме всё то же что я уже знаю, и что не работает.os.execute хорошо бы, но она запускает только то что записано в системные пути.Было бы хорошо считать путь из реестра...Кстати, через cmd можно бы его получить, и если выполняемый LUA скрипт может принимать внешние параметры запуска, то передавать через них. Да и вообще, если так делать, то можно на реестр забить, и считывать прям так.P.S Или может ну его на фиг, на каком-нить нормальном языке писать?.. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 21 июля, 2011 Поделиться Опубликовано 21 июля, 2011 >> Эм... да не, таблица по моему в файле есть, раз он спрашивает оставить ли её. Меня смущает сам факт этого вопроса, ведь если там нажать "No", то и изменений не будет.Раз вылазит такое сообщение, это странно. Наверняка, эту проблему можно решить.>>В общем, я решил, что для exe лучше в самом скрипте адреса считать, что бы не было этого вопроса.Как пожелаешь Главное, что работает.Могу только обратить твоё внимание, что в способе который я предложил уже встроена запись/заморозка значения по цепочке указателей с проверками можно ли прочитать адрес с каждого уровня указателя... И весь этот механизм уже готов. Надо узнать как его использовать из Lua вот и все. Но если это даётся с большими трудом, когда уже есть готовое решение, то может быть стоит этим и не заниматься.>> Про MHS я не в курсе(таких сокращений дико много, я не представляю о чём речь).MHS это программа аналогичная Cheat Engine, которая имеет приятные мелочи по исследованию Windows-процессов в частности по указателям... Только жаль не"понимает" инструкции процессора набора SIMD, а самое печальное почему-то давно не обновляется автором.По поводу запуска - фиг бы знал.В теме всё то же что я уже знаю, и что не работает.os.execute хорошо бы, но она запускает только то что записано в системные пути.Было бы хорошо считать путь из реестра...Кстати, через cmd можно бы его получить, и если выполняемый LUA скрипт может принимать внешние параметры запуска, то передавать через них. Да и вообще, если так делать, то можно на реестр забить, и считывать прям так.P.S Или может ну его на фиг, на каком-нить нормальном языке писать?.. Lua скрипт не может принимать параметры запуска. И зачем это надо? Можно сделать файл настроек и его Lua может читать и что-то делать. А лучше сделать не просто текстовый/бинарный файл настроек, а текстовый файл с .lua cо своими переменными, данными и кодом. По поводу реестра я более чем уверен, что можно читать ветки реестра, но только извратом используя автоассемблер и WinApi.<< P.S Или может ну его на фиг, на каком-нить нормальном языке писать?.. Использовать ли тебе Lua для решения подобных задач я не знаю. Это твоё решение. Я Lua использую, потому что этот язык позволяет управлять Cheat Engine, создавать сценарии, формы, "трейнеры", читы и т.п. Всё это можно делать на любом другом языке программирования в Windows. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dark_XSM Опубликовано 22 июля, 2011 Автор Поделиться Опубликовано 22 июля, 2011 Раз вылазит такое сообщение, это странно. Наверняка, эту проблему можно решить.Только если адреса грузить отдельным файлом с таблицей, я так думаю.Но если это даётся с большими трудом, когда уже есть готовое решение, то может быть стоит этим и не заниматься.Да не сказать что с большим, просто утомляет. Мне надо было написать небольшой exe для запуска, а этот LUA то одно не умеет, то второе не так как обычно.Что особого в готовом решении я не совсем понял, тем более что адрес я таки собираю с нуля, да и значение нормально считывается(тут, кстати, забавная штука, указатели на адрес собираются после записи туда значения, в результате чего отловить изначальную запись у меня не получилось, адрес всегда разный)...Фриз/анфриз мне вообще не нужен, значение задаётся один раз, и пока не вырубишь(ясен пень что я не стал заниматься фигнёй, и нашёл куда пишется базовое значение, с которого берутся все остальные, и с которым сравниваются изменяющиеся).MHS это программа аналогичная Cheat Engine, которая имеет приятные мелочи по исследованию Windows-процессов в частности по указателям... Только жаль не"понимает" инструкции процессора набора SIMD, а самое печальное почему-то давно не обновляется автором.Вроде нашёл что-то, тоже позволяет скрипты писать... тока у меня с ней косяк, я не доверяю прогам, и доступ она получила крайне ограниченный, так что не работает (менять ничего не хочу, пусть не работает)Lua скрипт не может принимать параметры запуска. И зачем это надо? Можно сделать файл настроекСделал. С ним та же фигня, путь уже чётко заданный нужен. Можно конечно заставлять юзера пихать файл в C:\, но хочется без этого.Использовать ли тебе Lua для решения подобных задач я не знаю. Это твоё решение.В курсе, это я так...Правда с другими языками я тоже не знаком почти.В общем, благодарю за помощь, но, кажись, LUA я оставлю в сторонке, и буду писать ланчеры на C++Тем более что ночью скачался C++ Builder 2010-го года. Правда с установкой непонятная фигня, но это уже к теме не относится. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения