Razi Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 Как нажать кнопку при условии если в адресе значение = 0, тода нажать кнопку NUMPAD6 два раза?Есть следующий код на Lua, который почему-то не хочет работать. Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(100) timer.OnTimer = function() value1 = readBytes('009CF175',1) if (value1 == 0) then keyDown(VK_NUMPAD6) sleep(100) keyUp(VK_NUMPAD6) sleep(500) keyDown(VK_NUMPAD6) sleep(100) keyUp(VK_NUMPAD6) end end [DISABLE] {$LUA} timer:setEnabled(false) Ссылка на комментарий Поделиться на другие сайты Поделиться
MParker Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 (изменено) Думаю, ты бы смог решить эту проблему быстрее, если бы просто зашел в гугл и нашел документацию по Lua в CE http://wiki.cheatengine.org/index.php?title=Lua Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(100) timer.OnTimer = function() value1 = readBytes('009CF175',1) if (value1 == 0) then doKeyPress(VK_NUMPAD6) Sleep(500) doKeyPress(VK_NUMPAD6) end end [DISABLE] {$LUA} timer:setEnabled(false) Разница doKeyPress и keyDown в том, что первый имитирует нажатие клавиши, а второй изменяет состояние ключа Изменено 17 января, 2018 пользователем MParker Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 точно не работает?может надо чтоб numpad включен был? Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 17 января, 2018 Автор Поделиться Опубликовано 17 января, 2018 Нужно чтоб нажатие кнопок работало в эмуляторе Playstation1 epsxe1.7.0. Когда делаю окно блокнота активным, когда скрипт включен, в окне блокнота нажимается кнопка numpad6 и пишет число 6 постоянно. А в окне эмулятора почему-то не хочет нажимать кнопку numpad6 или другие кнопки. (Хотя кнопка home нажимается, но эта кнопка делает настройки в самом эмуляторе). Ссылка на комментарий Поделиться на другие сайты Поделиться
MParker Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 (изменено) 2 минуты назад, Razi сказал: эмулятора почему-то не хочет нажимать кнопку numpad6 или другие кнопки Может он просто не умеет перехватывать события клавиш? или CE не может ему передать их по каким-либо причинам. Изменено 17 января, 2018 пользователем MParker Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 в ePSXe точно кажется через AutoIt не работало нажатие, скорее всего те 2 функции в CE тоже не помогут нужно ловить DirectInput Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 17 января, 2018 Автор Поделиться Опубликовано 17 января, 2018 9 минут назад, MParker сказал: Может он просто не умеет перехватывать события клавиш? Возможно, иногда бывает что запускается два окошка: одно эмулятор, второе игровое. 6 минут назад, X86Jumps сказал: нужно ловить DirectInput как это сделать? Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 найти уже созданную проверяя где создается через DirectInput8Create Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 17 января, 2018 Автор Поделиться Опубликовано 17 января, 2018 7 минут назад, X86Jumps сказал: найти уже созданную проверяя где создается через DirectInput8Create Давно не пользовался CE, почти все забыл. Обьясни более подробно, если можно. Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 2 минуты назад, Razi сказал: Давно не пользовался CE, почти все забыл. Обьясни более подробно, если можно. ну запустить ePsxe, открыть дизасемблер и там в enumerate dll чего то, поищи что то из DirectInput8Input посмотри где она вызывается в коде и смотри куда сохраняется Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 17 января, 2018 Автор Поделиться Опубликовано 17 января, 2018 Нашел DINPUT.dll адрес 72260000. А другого, более простого способа нету? В дизасемблере нужно будет долго искать. Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 именно в ePsxe я еще давно пробовал не работало всякие там SendInput,doKeyDown,KeyDown там не долго искать, через поиск кода ищи вызов этой функции (ищи call DirectInput8Create) Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 17 января, 2018 Автор Поделиться Опубликовано 17 января, 2018 (изменено) Нашел вот такое: call DINPUT.DirectInputCreateEx+2179 подойдет такое? Как к нему прицепиться? Изменено 17 января, 2018 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 (изменено) 2 часа назад, Razi сказал: Нашел вот такое: call DINPUT.DirectInputCreateEx+2179 подойдет такое? Как к нему прицепиться? нашел в программе где вызывается? дальше результат куда сохраняет?обычно результат в eax, после вызова но для подобных функций (COM) обычно это один из параметров https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.directinput8create(v=vs.85).aspx тут он 4й будет, в коде он будет 3 параметров (параметры от конца к началу идут) у меня в версии 1,5,2 типа такого есть ePSXe.exe+E05B - E8 80900200 - call ePSXe.exe+370E0 { ->->DINPUT.DirectInputCreateA } ePSXe.exe+E060 - 8B F8 - mov edi,eax Изменено 17 января, 2018 пользователем X86Jumps Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 18 января, 2018 Автор Поделиться Опубликовано 18 января, 2018 в версии 1,7,0 нашел (спустя 5 часов поиска) такое ePSXe ENG.exe+11CB9 - E8 62B00200 - call ePSXe ENG.exe+3CD20 { ->->DINPUT.DirectInputCreateA } ePSXe.exe+11CBE - 8B F8 - mov edi,eax А дальше что? (если можешь обьясни более подробно) Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 18 января, 2018 Автор Поделиться Опубликовано 18 января, 2018 Видел на сайте Cheat engine один человек спрашивал что-то похожее и говорил что его вопрос не связан с онлайн играми. Имею в виду что может лучше ответ в ЛС написать, если есть. Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 19 января, 2018 Поделиться Опубликовано 19 января, 2018 (изменено) для версии 1,7,0 iDirectInputDevice GetDeviceState возвращает данные в стек, а потом копирует в 0050F0C0 данные в этом случае - массив 256 байт, коды кнопок не VK как в винде, а DirectInput keyboard scan codes http://www.flint.jp/misc/?q=dik&lang=en например установка в 1 байта 0050F0C0+C8 даст эмуляцию нажатия Up arrow (DIK_UP) пока так, если покопаться можно понять как кнопки конвертируются в кнопки пада (в текущей конфигурации) Изменено 19 января, 2018 пользователем X86Jumps 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 19 января, 2018 Поделиться Опубликовано 19 января, 2018 у тебя скрипт там есть вместо doKey или doKeyPress пиши writeBytes(0x0050F0C0+0xc8,1) c8 я для примера набрал, это Arrow Up потом у тебя sleep идет и уже keyUp, вместо его writeBytes(0x0050F0C0+0xc8,0) примерно так (1 раз) writeBytes(0x0050F0C0+0xc8,1) sleep(100) writeBytes(0x0050F0C0+0xc8,0) 2 раза writeBytes(0x0050F0C0+0xc8,1) sleep(100) writeBytes(0x0050F0C0+0xc8,0) sleep(100) writeBytes(0x0050F0C0+0xc8,1) sleep(100) writeBytes(0x0050F0C0+0xc8,0) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 20 января, 2018 Поделиться Опубликовано 20 января, 2018 (изменено) скрипт автоматического нажатия кнопки numpad6 для версии 1.5.2 (4d - клавиша numpad6 в кодах dinput) Скрытый текст [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) label(returnhere) label(originalcode) label(exit) label(data) newmem: //this is allocated memory, you have read,write,execute access //place your code here call kernel32.GetTickCount sub eax,[data] cmp eax,200 jb @f mov byte ptr[00509A20+4d],1 call kernel32.GetTickCount mov [data],eax originalcode: xor eax,eax cmp ecx,ebx je ePSXe.exe+EC53 exit: jmp returnhere data: dd 0 "ePSXe.exe"+E697: jmp newmem nop nop nop nop nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "ePSXe.exe"+E697: xor eax,eax cmp ecx,ebx je ePSXe.exe+EC53 //Alt: db 33 C0 3B CB 0F 84 B2 05 00 00 для версии 1.7.0 Скрытый текст [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) label(returnhere) label(originalcode) label(exit) label(data) newmem: //this is allocated memory, you have read,write,execute access //place your code here call kernel32.GetTickCount sub eax,[data] cmp eax,200 jb @f mov byte ptr[0050F0C0+4d],1 call kernel32.GetTickCount mov [data],eax originalcode: xor eax,eax cmp ecx,ebx je "ePSXe ENG.exe"+12AED exit: jmp returnhere data: "ePSXe ENG.exe"+124BA: jmp newmem nop nop nop nop nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "ePSXe ENG.exe"+124BA: xor eax,eax cmp ecx,ebx je "ePSXe ENG.exe"+12AED //Alt: db 33 C0 3B CB 0F 84 29 06 00 00 Изменено 20 января, 2018 пользователем X86Jumps 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения