Гость

Авто-подключение к нужному процессу, при открытой СЕ таблице

40 сообщений в этой теме

Всем доброго времени.

Наверное, не одному мне не нравится каждый раз выбирать нужный процесс для подключения СЕ, чтобы пользоваться таблицами. Примеров особого неудобства, связанным с этим моментом - может быть масса, но я приведу лишь два основных примера:

  1. Представьте, что вы взялись взламывать какую-то игру. Ищете значение, ставите бряк, идете в отладчик, написали скрипт, и "БАЦ" - игра вылетела/зависла. Такое бывает, но вам от этого не легче - нужно снова запускать игру, подключаться к ней, снова искать значение, и т.д. и т.п.
  2. Допустим, у вас есть любимая игра, или игра, в которую вы чаще всего играете (может, не всегда, а в последнее время). У вас есть для нее таблица, но трейнеров нет (как у меня, например - у меня все лежит в таблицах), и вам КАЖДЫЙ раз приходится искать нужный процесс в списке, подключаться к нему, а ведь для этого нужно также переключиться на окно СЕ, и не все игры адекватно реагируют на Alt+TAB, и на переключение окон - в целом.

Знакомо? Думаю, что это знакомо многим. Кто-то может сказать, что в СЕ есть специальная для этого "плюшка" - список процессов для подключения, и, в какой-то степени, они будут правы, но тут вы столкнетесь с некоторыми "подводными камнями", например:

  • Несколько процессов (забитых в этот список СЕ, для авто-подключения) запущены одновременно. Как думаете, к какому процессу СЕ подключится? К нужному вам? Или к какому-либо другому? Гадание на кофейной гуще - не наш метод.
  • Что, если вашей таблицей будет пользоваться другой человек, не разбирающийся в СЕ, или даже не знающий имя процесса игры?

Но ведь СЕ дает нам не только эту "плюшку", для авто-подключения, и не только возможность взламывать игры, но и запускать пользовательские скрипты, и я говорю не о тех скриптах, которые мы пишем для игр, типа бессмертия... Я говорю о немного другой, может, не всем известной возможности... Вступление как-то затянулось, так что перейдем уже к делу :)

 

Итак, первым делом, откройте СЕ (если он у вас еще не запущен). Далее - проследуйте в меню (в главном окне): Table -> Show Cheat Table Lua Script (или нажмите комбинацию клавиш Ctrl+Alt+L), после чего откроется окно с большим полем ввода, и кнопкой "Execute Script".

В поле ввода мы пишем следующий код:

Скрытый текст

function Process_Check()
 local ProcessName = "Tutorial-i386.exe"
 local bIsAttached = getOpenedProcessID()
 local dwPID = getProcessIDFromProcessName(ProcessName)
 if (bIsAttached == 0 and dwPID ~= 0) or (bIsAttached ~= 0 and dwPID ~= bIsAttached) then
  OpenProcess(ProcessName)
 end
end

function Timer_Manager(pTimerObj, dwMilliseconds, pTimerFunction, bTimerEnabled)
 pTimerObj.OnTimer = pTimerFunction
 pTimerObj.Interval = dwMilliseconds
 pTimerObj.Enabled = bTimerEnabled
end

Timer_AutoAttacher = createTimer(AutoAttach)
Timer_Manager(Timer_AutoAttacher, 1000, Process_Check, true)

 

Обратите внимание на переменную "ProcessName", в функции "Process_Check" - она содержит имя нужного нам процесса, к которому нужно подключаться.

Следом стоит обратить внимание на параметр "1000", который мы передаем в функцию "Timer_Manager" - она отвечает за интервал срабатывания таймера (то есть, в примере, мы каждые 1000 миллисекунд проверяем список процессов).

Примечание:

1000 миллисекунд - это всего-навсего 1 (одна) секунда, можете поставить меньший интервал, или наоборот - больший, но, на мой взгляд, одной секунды вполне достаточно для комфортного подключения к процессу, после запуска игры.

 

После вставки кода, и настройки параметров - нажмите кнопку "Execute script", запустите игру, и вуаля - СЕ автоматически подключился к указанному нами процессу. Стоит только сказать, что если запущено две (или больше) игры одновременно, то, вероятнее всего, СЕ подключится к первому найденному процессу, а не к тому, к какому бы вам хотелось. Так что это стоит учитывать.

 

Теперь вы можете сохранить таблицу, и при каждом ее открытии (даже при не запущенной игре) - этот скрипт будет работать, и будет искать нужный нам процесс, и если СЕ уже подключен к нужному процессу - отключения или переподключения к процессу не произойдет, что немаловажно. Поэтому вы можете спокойно работать с таблицей и игрой дальше, в обычном режиме.

 

Собственно, это все, о чем я хотел рассказать, и, надеюсь, многим эта информация будет полезна. Напоследок лишь хотел бы сказать, что это лишь один пример того, как можно упростить себе жизнь, ведь лень - двигатель прогресса ;)

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
if (bIsAttached == 0 and dwPID ~= 0) or (bIsAttached ~= 0 and dwPID ~= bIsAttached)

ЕСЛИ  (текущий процесс закрыт И найден другой) ИЛИ (текущий процесс открыт И найден другой)

можно переделать на

ЕСЛИ  (текущий процесс НЕ является найденным другим)

if (getOpenedProcessID() ~= getProcessIDFromProcessName("Tutorial-i386.exe"))

Тоже самое

local timerAutorun = createTimer(nil, true)
timerAutorun.Interval = 1000
timerAutorun.OnTimer = function ()
if (getOpenedProcessID() ~= getProcessIDFromProcessName("Tutorial-i386.exe")) then
OpenProcess("Tutorial-i386.exe")
end
end
1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть и такой вариант, но он разовый

getAutoAttachList().add('Tutorial-i386.exe')

 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Способов построения условий много, согласен. Возможно в API CE даже есть возможность найти окно по его классу и заголовку, а не только по имени процесса, тогда скрипт может быть более уникальным. Я лишь предложил один способ, если его кто-то изменит у себя, и выложит в этой теме - я ничего не имею против.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что нужно добавить, что бы трейнер всегда мог определить процесс? Не в зависимости, что сначала запустили трейнер или игру. Данный вариант работает только, когда запускаешь сначала трейнер, потом игру, а если наоборот это сделать, то трейнер процесс не определяет и не работает вообщем то.

 

function myattach(timer) 
  if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then 
    object_destroy(timer) 
    openProcess("Tutorial-i386.exe")  
  end 
end 

t=createTimer(nil); 
timer_setInterval(t,10) 
timer_onTimer(t,myattach) 

 

Данный выше вариант работает наоборот :D Сначала запускаешь игру, её сворачиваешь, запускаешь трейнер и тогда всё работает) Если всё сделать наоборот, то нифига не работает=( Можно ли как то это всё объеденить? 

Изменено пользователем NEO
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, NEO сказал:

Что нужно добавить, что бы трейнер всегда мог определить процесс?

В твоём примере не работает таймер.

Сделай так и всё заработает:

Скрытый текст

function myattach(timer)
  if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then
    object_destroy(timer)
    openProcess("Tutorial-i386.exe")
  end
end

t=createTimer(true)
timer_setInterval(t,10)
timer_onTimer(t,myattach)

 

 

Изменено пользователем Garik66
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
17 минуту назад, Garik66 сказал:

В твоём примере не работает таймер.

Сделай так и всё заработает:

  Показать содержимое


function myattach(timer)
  if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then
    object_destroy(timer)
    openProcess("Tutorial-i386.exe")
  end
end

t=createTimer(true)
timer_setInterval(t,10)
timer_onTimer(t,myattach)

 

 

Тогда вообще ничего не работает. Пробовал сначала запустить трейнер, потом игру, и наоборот. Эффекта 0. 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
15 минуту назад, NEO сказал:

Тогда вообще ничего не работает. Пробовал сначала запустить трейнер, потом игру, и наоборот. Эффекта 0. 

Почему всегда приходится записывать видео, чтобы доказать?

ты точно попробовал?

 

Видео:

 

 

 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
16 минуту назад, Garik66 сказал:

Почему всегда приходится записывать видео, чтобы доказать?

NEO,

ты точно попробовал?

 

Видео:

 

 

 

А вы попробуйте скомпилировать трейнер в exe формат, выключить Cheat Engine и проверить. Если у меня запущен Cheat Engine у меня тоже определяет процесс и работает всё, в скомпилированном виде нифига=( Уже попробовал раз 10.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
21 минуты назад, NEO сказал:

А вы попробуйте скомпилировать трейнер в exe формат

Вот Фома-неверующий :D.

Видео:

 

 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
18 час назад, NEO сказал:

А вы попробуйте скомпилировать трейнер в exe формат, выключить Cheat Engine и проверить. 

Снял для тебя ещё видео и в скрипт добавил не много для наглядности:

 

 

Скрытый текст

function CETimer1Timer(sender)
if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then
    openProcess("Tutorial-i386.exe")
    control_setCaption(UDF1_CELabel1, "Обучение СЕ запущено")
    Value = readInteger('["Tutorial-i386.exe"+2345D0]+480')
    if (Value ~= nil) then
        control_setCaption(UDF1_CEEdit1, Value)
    end
    object_destroy(CETimer1)
    else
    control_setCaption(UDF1_CELabel1, "Обучение СЕ не запущено") 
  end
end

 

 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
28 минуты назад, Garik66 сказал:

NEOну что так и не получается?

Снял для тебя ещё видео и в скрипт добавил не много для наглядности:

 

 

  Показать содержимое


function CETimer1Timer(sender)
if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then
    openProcess("Tutorial-i386.exe")
    control_setCaption(UDF1_CELabel1, "Обучение СЕ запущено")
    Value = readInteger('["Tutorial-i386.exe"+2345D0]+480')
    if (Value ~= nil) then
        control_setCaption(UDF1_CEEdit1, Value)
    end
    object_destroy(CETimer1)
    else
    control_setCaption(UDF1_CELabel1, "Обучение СЕ не запущено") 
  end
end

 

 

Да блин( Ну капец!( Всё ровно не работает, я уже даже не знаю в чём дело О_О Спасибо вам огромное за помощь, буду разбираться, скорей всего что то не правильно в трейнере самом( Попробую поискать исходники других трейнеров, буду на их основе разбираться О_О Ещё раз спасибо вам) К сожалению плюсики ставить не могу пока=( Так бы уже закидал!)

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А что если игра запускает несколько процессов с одинаковыми именами и нам нужен последний запущенный процесс? Например лаунчер и саму игру.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет всем, можно как то сделать, что бы при запуске процесс, ещё каким ни будь цветом загоралась, красным или синим например.

Я в самой CE форме полазил, но что то не нашёл такого, я знаю что можно цвет поменять только на функциях которые прикрепляешь к форме, вот у них можно менять цвет активации,

а на процесс нет, что то я не нашёл такого, подскажите пожалуйста. 

Изменено пользователем Baracuda
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

UDF1.CElabel1.Font.Color = 0x00D27555 // синий

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

можешь сказать, как самому цвета менять, где можно посмотреть и другие цвета.

 0x00D27555

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, Baracuda сказал:

можешь сказать, как самому цвета менять, где можно посмотреть и другие цвета.

 0x00D27555

Скрытый текст

bandicam20_2735067_23942118.jpg

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я наверное не так объяснил, я имею веду, вот когда Trainer запускаешь, то Процесс ещё не найденный горит синим цветом, а когда процесс найден, чтобы загорался жёлтым цветом например. Как мене это сделать.

А так как ты показал, он всегда будет гореть тем цветом который у кажешь, я это знаю.

Но мене надо немного подругому

Изменено пользователем Baracuda
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Скрытый текст

function procctimer()
if getProcessIDFromProcessName("Tutorial-i386.exe") == nil then
UDF1.CElabel1.Font.Color = 0x00D27555 // синий
else
if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then
UDF1.CElabel1.Font.Color = 0x002E41C5 // красный
end end end

 

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

появилась новая проблема, вот видео записал, не пойму что не так. http://dropmefiles.com/ckeUj

Саму программу Cheat Engine, уже заново раз 10 перестанавливал и всё равно выдавало эту ошибку.

Изменено пользователем Baracuda
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
24 минуты назад, Baracuda сказал:

появилась новая проблема,

Это не проблема - это просто не дописанный скрипт (не верно написанный скрипт), если процесса нет - нужно отключить таймер.

25 минуты назад, Baracuda сказал:

Саму программу Cheat Engine, уже заново раз 10 перестанавливал и всё равно выдавало эту ошибку.

Дело не в СЕ.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да но на видео от ForNEO, работало без проблем.

Изменено пользователем Baracuda
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
27 минуты назад, Baracuda сказал:

Да но на видео от ForNEO, работало без проблем.

Выложи сюда свой скрипт - поправим (только после кино - смотрю сейчас). А на видео ForNEO я уже не помню какой был скрипт.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
42 минуты назад, Baracuda сказал:

Да но на видео от ForNEO, работало без проблем.

А понял, так у меня на видео указатели найдены для версии СЕ 6,5 кажется, а у тебя версия 6,6. Сперва найди указатели для адреса Шага 2, замени в скрипте и будет тоже всё работать.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не это не помогает 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас