Перейти к содержанию

Как нажать кнопку при условии?


Razi

Рекомендуемые сообщения

Как нажать кнопку при условии если в адресе значение = 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)

 

 

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

Думаю, ты бы смог решить эту проблему быстрее, если бы просто зашел в гугл и нашел документацию по 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 в том, что первый имитирует нажатие клавиши, а второй изменяет состояние ключа 

Изменено пользователем MParker
Ссылка на комментарий
Поделиться на другие сайты

Нужно чтоб нажатие кнопок работало в эмуляторе Playstation1 epsxe1.7.0. Когда делаю окно блокнота активным, когда скрипт включен, в окне блокнота нажимается кнопка numpad6 и пишет число 6 постоянно. А в окне эмулятора почему-то не хочет нажимать кнопку numpad6 или другие кнопки. (Хотя кнопка home нажимается, но эта кнопка делает настройки в самом эмуляторе).

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

2 минуты назад, Razi сказал:

эмулятора почему-то не хочет нажимать кнопку numpad6 или другие кнопки

Может он просто не умеет перехватывать события клавиш? или CE не может ему передать их по каким-либо причинам.

Изменено пользователем MParker
Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, MParker сказал:

Может он просто не умеет перехватывать события клавиш?

Возможно, иногда бывает что запускается два окошка: одно эмулятор, второе игровое.

 

6 минут назад, X86Jumps сказал:

нужно ловить DirectInput

как это сделать?

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

7 минут назад, X86Jumps сказал:

найти уже созданную
проверяя где создается через DirectInput8Create

Давно не пользовался CE, почти все забыл. Обьясни более подробно, если можно.

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

2 минуты назад, Razi сказал:

Давно не пользовался CE, почти все забыл. Обьясни более подробно, если можно.

ну запустить ePsxe, открыть дизасемблер и там в enumerate dll чего то, поищи что то из DirectInput8Input
посмотри где она вызывается в коде и смотри куда сохраняется

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

именно в ePsxe я еще давно пробовал не работало всякие там SendInput,doKeyDown,KeyDown

там не долго искать, через поиск кода ищи вызов этой функции (ищи call DirectInput8Create)

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

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

 

Изменено пользователем X86Jumps
Ссылка на комментарий
Поделиться на другие сайты

в версии 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

А дальше что? (если можешь обьясни более подробно)

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

Видел на сайте Cheat engine один человек спрашивал что-то похожее и говорил что его вопрос не связан с онлайн играми. Имею в виду что может лучше ответ в ЛС написать, если есть.

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

для версии 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)

пока так, если покопаться можно понять как кнопки конвертируются в кнопки пада (в текущей конфигурации)

Изменено пользователем X86Jumps
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

у тебя скрипт там есть

вместо 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
Ссылка на комментарий
Поделиться на другие сайты

скрипт автоматического нажатия кнопки 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

 

 

Изменено пользователем X86Jumps
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.