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

Как в Cheat Engine произвести автоматическое нажатие клавиш?


Razi

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

Добавил ещё скрипт, мне кажется он лучше, так как нет привязки к таблице, т.е. будет работать у всех. 

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

[ENABLE]
{$LUA}
timer = createTimer(true)
timer:setInterval(5)
timer.OnTimer = function()
FreezingConditions = readInteger('00A3F3E5')
if (FreezingConditions == 2) then
memoryrecord_freeze('00A444E8') -- заморозка
end
end
{$ASM}
[DISABLE]
{$LUA}
timer:setEnabled(false) 

 

 

 

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

  • Ответов 109
  • Создана
  • Последний ответ

Топ авторов темы

Можно я тоже вставлю свое слово. И попытаюсь чем нибудь помочь. Но я правда ничего пока не понял, что нужно для чего нужно. Суть понял, но детали не увидел.

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

Но я правда ничего пока не понял, что нужно для чего нужно.

Задание разбросано по всей теме.

Сейчас делаем:

1. Имеются два адреса.

2. Нужно, чтобы значение в одном заморозилось, если в другом значение равно 2, при любом другом значении - не замораживаем.

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

Главный и первый вопрос в том, чтоб при условии, что адрес 00A47010 равен 1 автоматически нажималась клавиша "home" один раз, а если этот адрес равен 0, то нажималась клавиша "end" один раз. Или вместо "home" нажималось ctrl плюс буква, а вместо "end" нажималось ctrl плюс другая буква.

 

А мы сейчас рассматриваем второй вопрос :

В скрипте если адрес 00A3F3E5 равен значению 2,то адрес 00A444E8 должен заморозиться,

а если, адрес 00A3F3E5 не равен значению 2, то адрес 00A444E8 должен разморозиться.

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

Спасибо, до меня порой так долго доходят даже самые простые вещи.

 

А Можешь выложить сюда файл таблицу СЕ, с готовыми адресами, ну и со всем что нудно. Чтобы еще понятней было.

 

1 А что эти адреса ститичные, поинтеры?

2 Они где, в таблице уже?

3 А если адрес 00A47010 всегда равен 1, ну или долгое время. То есть чтобы клавиша нажалась только при его установке на 1, а потом уже не важно? Или чтобы когда он потом вдруд изменится с единицы на что другое, а потом опять (второй раз) станет 1, то и теперь надо сделать срабатывание клавиши, и также, один раз

4 Что меняет его на 1 и на 0?

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

1. статичные, по 1 байту каждый

2. в таблице

3. да, Когда изменится адрес 00A47010 на 1 нажать "home" один раз, чтобы когда он потом вдруг изменится с единицы на число 0 то нажать "end" один раз, а потом опять (второй раз) станет 1, то и теперь надо сделать срабатывание клавиши "home" и также, один раз, и снова изменится на 0 то нажать "end" и также, один раз и так постоянно.

4. Меняет на 1 только когда (начинается) происходит один прием в игре, на 0 когда этот прием не происходит (заканчивается).

 

 

Garik66,  инструкция на запись на адрес который нужно заморозить (было 2 инструкции, выбрал ту у которой больше срабатываний, и она правильнее действует)

правда, я так и не понял почему не по тому адресу по которому происходит сравнение.

{ Game   : ePSXe ENG.exe  Version:   Date   : 2016-02-01  Author : User  This script does blah blah blah}[ENABLE]aobscan(INJECT,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(code)label(return)newmem:code:  mov [eax+ecx],ebx  and edx,001FFFFC  jmp returnINJECT:  jmp newmem  nop  nop  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 89 1C 08 81 E2 FC FF 1F 00unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: 030504340305040B: 81 FA 00 00 80 1F     -  cmp edx,1F80000003050411: 74 62                 -  je 0305047503050413: 8B 0D 84 0A 51 00     -  mov ecx,["ePSXe ENG.exe"+110A84]03050419: F7 C1 00 00 01 00     -  test ecx,100000305041F: 75 53                 -  jne 0305047403050421: 8B C8                 -  mov ecx,eax03050423: 89 C2                 -  mov edx,eax03050425: C1 E9 10              -  shr ecx,1003050428: 25 FF FF 00 00        -  and eax,0000FFFF0305042D: 8B 0C 8D 40 AF 82 00  -  mov ecx,[ecx*4+"ePSXe ENG.exe"+42AF40]// ---------- INJECTING HERE ----------03050434: 89 1C 08              -  mov [eax+ecx],ebx03050437: 81 E2 FC FF 1F 00     -  and edx,001FFFFC// ---------- DONE INJECTING  ----------0305043D: BB 20 00 26 03        -  mov ebx,0326002003050442: 03 DA                 -  add ebx,edx03050444: 8B 03                 -  mov eax,[ebx]03050446: 3D 40 00 05 03        -  cmp eax,030500400305044B: 75 01                 -  jne 0305044E0305044D: C3                    -  ret 0305044E: B8 40 00 05 03        -  mov eax,0305004003050453: 8B 0C 10              -  mov ecx,[eax+edx]03050456: B8 20 00 4F 03        -  mov eax,034F00200305045B: 8B 04 10              -  mov eax,[eax+edx]}

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

Попробуй:


На всякий случай


И того окончательный скрипт по заморозке нужного адреса при определённых условиях, который устроил Razi:

{ Game   : ePSXe ENG.exe  Version:   Date   : 2016-02-01  Author : User  This script does blah blah blah}[ENABLE]aobscan(INJECT,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(code)label(return)newmem:  cmp byte ptr [00A3F3E5],2  jne code                          // а дальше что? А дальше вот это:  mov ebx,[eax+ecx]                 // замораживаем адрес на нужное значение - какое-то игровое                                    // значение - ты сам его знаешь.code:  mov [eax+ecx],ebx  and edx,001FFFFC  jmp returnINJECT:  jmp newmem  nop  nop  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 89 1C 08 81 E2 FC FF 1F 00unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: 030504340305040B: 81 FA 00 00 80 1F     -  cmp edx,1F80000003050411: 74 62                 -  je 0305047503050413: 8B 0D 84 0A 51 00     -  mov ecx,["ePSXe ENG.exe"+110A84]03050419: F7 C1 00 00 01 00     -  test ecx,100000305041F: 75 53                 -  jne 0305047403050421: 8B C8                 -  mov ecx,eax03050423: 89 C2                 -  mov edx,eax03050425: C1 E9 10              -  shr ecx,1003050428: 25 FF FF 00 00        -  and eax,0000FFFF0305042D: 8B 0C 8D 40 AF 82 00  -  mov ecx,[ecx*4+"ePSXe ENG.exe"+42AF40]// ---------- INJECTING HERE ----------03050434: 89 1C 08              -  mov [eax+ecx],ebx03050437: 81 E2 FC FF 1F 00     -  and edx,001FFFFC// ---------- DONE INJECTING  ----------0305043D: BB 20 00 26 03        -  mov ebx,0326002003050442: 03 DA                 -  add ebx,edx03050444: 8B 03                 -  mov eax,[ebx]03050446: 3D 40 00 05 03        -  cmp eax,030500400305044B: 75 01                 -  jne 0305044E0305044D: C3                    -  ret 0305044E: B8 40 00 05 03        -  mov eax,0305004003050453: 8B 0C 10              -  mov ecx,[eax+edx]03050456: B8 20 00 4F 03        -  mov eax,034F00200305045B: 8B 04 10              -  mov eax,[eax+edx]} 
{ Game   : ePSXe ENG.exe  Version:  Date   : 2016-02-01  Author : User  This script does blah blah blah}[ENABLE]aobscan(INJECT,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(code)label(return)newmem:  cmp byte ptr [00A3F3E5],2  jne code  push edx  lea edx,[eax+ecx]  cmp edx,00A444E8  pop edx  jne code  mov ebx,[eax+ecx]code:  mov [eax+ecx],ebx  and edx,001FFFFC  jmp returnINJECT:  jmp newmem  nop  nop  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 89 1C 08 81 E2 FC FF 1F 00unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: 030504340305040B: 81 FA 00 00 80 1F     -  cmp edx,1F80000003050411: 74 62                 -  je 0305047503050413: 8B 0D 84 0A 51 00     -  mov ecx,["ePSXe ENG.exe"+110A84]03050419: F7 C1 00 00 01 00     -  test ecx,100000305041F: 75 53                 -  jne 0305047403050421: 8B C8                 -  mov ecx,eax03050423: 89 C2                 -  mov edx,eax03050425: C1 E9 10              -  shr ecx,1003050428: 25 FF FF 00 00        -  and eax,0000FFFF0305042D: 8B 0C 8D 40 AF 82 00  -  mov ecx,[ecx*4+"ePSXe ENG.exe"+42AF40]// ---------- INJECTING HERE ----------03050434: 89 1C 08              -  mov [eax+ecx],ebx03050437: 81 E2 FC FF 1F 00     -  and edx,001FFFFC// ---------- DONE INJECTING  ----------0305043D: BB 20 00 26 03        -  mov ebx,0326002003050442: 03 DA                 -  add ebx,edx03050444: 8B 03                 -  mov eax,[ebx]03050446: 3D 40 00 05 03        -  cmp eax,030500400305044B: 75 01                 -  jne 0305044E0305044D: C3                    -  ret0305044E: B8 40 00 05 03        -  mov eax,0305004003050453: 8B 0C 10              -  mov ecx,[eax+edx]03050456: B8 20 00 4F 03        -  mov eax,034F00200305045B: 8B 04 10              -  mov eax,[eax+edx]} 
{ Game   : ePSXe ENG.exe  Version:  Date   : 2016-02-01  Author : User  This script does blah blah blah}[ENABLE]aobscan(INJECT,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(code)label(code1)label(return)newmem:  cmp byte ptr [00A3F3E5],2  jne code  push edx  lea edx,[eax+ecx]  cmp edx,00A444E8  pop edx  jne code  cmp ebx,8  jne @f  mov [eax+ecx],8  jmp code1@@:  cmp ebx,#72  jne code1  mov [eax+ecx],#72code1:  mov ebx,[eax+ecx]code:  mov [eax+ecx],ebx  and edx,001FFFFC  jmp returnINJECT:  jmp newmem  nop  nop  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 89 1C 08 81 E2 FC FF 1F 00unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: 030504340305040B: 81 FA 00 00 80 1F     -  cmp edx,1F80000003050411: 74 62                 -  je 0305047503050413: 8B 0D 84 0A 51 00     -  mov ecx,["ePSXe ENG.exe"+110A84]03050419: F7 C1 00 00 01 00     -  test ecx,100000305041F: 75 53                 -  jne 0305047403050421: 8B C8                 -  mov ecx,eax03050423: 89 C2                 -  mov edx,eax03050425: C1 E9 10              -  shr ecx,1003050428: 25 FF FF 00 00        -  and eax,0000FFFF0305042D: 8B 0C 8D 40 AF 82 00  -  mov ecx,[ecx*4+"ePSXe ENG.exe"+42AF40]// ---------- INJECTING HERE ----------03050434: 89 1C 08              -  mov [eax+ecx],ebx03050437: 81 E2 FC FF 1F 00     -  and edx,001FFFFC// ---------- DONE INJECTING  ----------0305043D: BB 20 00 26 03        -  mov ebx,0326002003050442: 03 DA                 -  add ebx,edx03050444: 8B 03                 -  mov eax,[ebx]03050446: 3D 40 00 05 03        -  cmp eax,030500400305044B: 75 01                 -  jne 0305044E0305044D: C3                    -  ret0305044E: B8 40 00 05 03        -  mov eax,0305004003050453: 8B 0C 10              -  mov ecx,[eax+edx]03050456: B8 20 00 4F 03        -  mov eax,034F00200305045B: 8B 04 10              -  mov eax,[eax+edx]} 
Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

скрипт по заморозке нужного адреса при определённых условиях

Да, кстати такой скрипт и нужен был. Да, твой скрипт пускает и на 72 и на 8, так и надо.

Вчера 2 часа проверял твой скрипт, и хотел узнать когда в замораживаемом адресе значение = 8. И узнал еще одни нюансы, оказывается в этом адресе 00A444E8 нужно еще разрешить не только 72 и 8, но и 104 и 40. Но, я так понимаю это будет уже слишком сложно написать такой скрипт. Потому что я попробовал добавить попроще эти 104 и 40 в скрипт, но ничего не получилось.

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

Но, я так понимаю это будет уже слишком сложно написать такой скрипт.

Не сложно. Сейчас сделаю.

 

Потому что я попробовал добавить попроще эти 104 и 40 в скрипт, но ничего не получилось.

Не понимаю почему, ведь уже скрипт перед глазами.

{ Game   : ePSXe ENG.exe  Version:  Date   : 2016-02-01  Author : User  This script does blah blah blah}[ENABLE]aobscan(INJECT,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(code)label(code1)label(return)newmem:  cmp byte ptr [00A3F3E5],2  jne code  push edx  lea edx,[eax+ecx]  cmp edx,00A444E8  pop edx  jne code  cmp ebx,8  jne @f  mov [eax+ecx],8  jmp code1@@:  cmp ebx,#40  jne @f  mov [eax+ecx],#40  jmp code1@@:  cmp ebx,#72  jne @f  mov [eax+ecx],#72  jmp code1@@:  cmp ebx,#104  jne code1  mov [eax+ecx],#104code1:  mov ebx,[eax+ecx]code:  mov [eax+ecx],ebx  and edx,001FFFFC  jmp returnINJECT:  jmp newmem  nop  nop  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 89 1C 08 81 E2 FC FF 1F 00unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: 030504340305040B: 81 FA 00 00 80 1F     -  cmp edx,1F80000003050411: 74 62                 -  je 0305047503050413: 8B 0D 84 0A 51 00     -  mov ecx,["ePSXe ENG.exe"+110A84]03050419: F7 C1 00 00 01 00     -  test ecx,100000305041F: 75 53                 -  jne 0305047403050421: 8B C8                 -  mov ecx,eax03050423: 89 C2                 -  mov edx,eax03050425: C1 E9 10              -  shr ecx,1003050428: 25 FF FF 00 00        -  and eax,0000FFFF0305042D: 8B 0C 8D 40 AF 82 00  -  mov ecx,[ecx*4+"ePSXe ENG.exe"+42AF40]// ---------- INJECTING HERE ----------03050434: 89 1C 08              -  mov [eax+ecx],ebx03050437: 81 E2 FC FF 1F 00     -  and edx,001FFFFC// ---------- DONE INJECTING  ----------0305043D: BB 20 00 26 03        -  mov ebx,0326002003050442: 03 DA                 -  add ebx,edx03050444: 8B 03                 -  mov eax,[ebx]03050446: 3D 40 00 05 03        -  cmp eax,030500400305044B: 75 01                 -  jne 0305044E0305044D: C3                    -  ret0305044E: B8 40 00 05 03        -  mov eax,0305004003050453: 8B 0C 10              -  mov ecx,[eax+edx]03050456: B8 20 00 4F 03        -  mov eax,034F00200305045B: 8B 04 10              -  mov eax,[eax+edx]} 
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

Проверил, скрипт работает замечательно.

 

ведь уже скрипт перед глазами.

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

 

Я вставлял вот сюда:

newmem:  cmp byte ptr [00A3F3E5],2  jne code  push edx  lea edx,[eax+ecx]  cmp edx,00A444E8  pop edx  jne code  cmp ebx,8  jne @f  mov [eax+ecx],8  cmp ebx,#40     // вот так вставлял  jne @f  mov [eax+ecx],#40  cmp ebx,#104   // и вот так  jne @f  mov [eax+ecx],#104  jmp code1

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

Проверил, скрипт работает замечательно.

Отлично.

 

Я не вижу скрипт в целом.

Я тебе писал уже совет - прокоментируй все строчки в скрипте, как я тебе делал в самом начале (совместной работы  :-D) .

По началу это очень помогает читать скрипт с листа и находить ошибки (если они есть).

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

писал уже совет - прокоментируй все строчки в скрипте, как я тебе делал в самом начале

Вот это кстати, самая полезная вещь. Хотел как  раз тебя попросить, описать строчки в скрипте хотя бы сокращенно. Потому что сам могу напутать кто куда прыгает в скрипте. Или я могу сам описать некоторые строчки, а ты можешь лишь дополнить, то что я не понял.

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

Или я могу сам описать некоторые строчки, а ты лишь дополнишь, то что я не понял.

Так будет лучше для твоего понимания. Пиши, выкладывай, если будет ошибка - поправлю со своими кометами.

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

У меня так получилось решить эти две задачи, кому будет интересно.

Zahvat2jpg_3137237_20509339.jpg
example - это адрес созданный специально для удостоверения что клавиши автоматически нажимаются (на этот адрес стандартным путем установлены горячие клавиши Home и End, первая прибавляет 5 другая отнимает)

Итак, выбираем любой процесс, (для тестирования сойдет любой), активируем луа скрипт, идем в таблицу, меняем значение Adr00A47010 на 1, видим что к example прибавилось 5 (хотя мы не нажимали Home. Теперь меняем его на 0, значение уменьшилось на 5, хотя мы не нажимали End.
************************************
FREZZER
Меняем значение Adr00A3F3E5 на 2, значение адреса Adr00A444E8 замораживается. Меняем на что нибудь другое, размораживается

Для твоего случая, нужно
* В таблице удалить example
* Для Adr00A47010, Adr00A3F3E5, Adr00A444E8 - поменять адреса (в самой таблице). Так как сейчас как видно на картинке эти адреса 02130000, 02130020, 02130030. Для forkeys адрес не меняем.

В скрипте удалить первые четыре строчки


 



А вот скрипт для клавиш Control и буквы (такой же как и первый, но с другими клавишами. В нем также нужно удат\лить первые четыре строчки).

 



Проект СЕ - Control + буква + Freezer
http://rghost.ru/8GJw2ZMsY

Проект СЕ - Home End + Freezer
http://rghost.ru/727qBD45L

 

 

Таймер на заморозку работает с частотой 400 милисекунд, когда же заметит что значение 2 и пора замораживать, переходит в режим "поехали" и морозит уже чаще, с частотой 10, потом, если значение меняется на НЕ 2, переходит на частоту 400.

Частоту можно выбрать свою.

autoAssemble([[globalalloc(Adr00A47010, 4)]])autoAssemble([[globalalloc(example, 4)]])autoAssemble([[globalalloc(Adr00A3F3E5, 4)]])autoAssemble([[globalalloc(Adr00A444E8, 4)]])autoAssemble([[globalalloc(forkeys, 4)]])al = getAddressList()Adr00A3F3E5 = al.getMemoryRecordByDescription("Adr00A3F3E5")Adr00A444E8 = al.getMemoryRecordByDescription("Adr00A444E8")Adr00A47010 = al.getMemoryRecordByDescription("Adr00A47010")forkeys = al.getMemoryRecordByDescription("forkeys")function freezeriftwo(timer)if Adr00A3F3E5.Value~="??" thenif Adr00A444E8.Value~="??" thenif Adr00A3F3E5.Value=="2" thenAdr00A444E8.Active=truetimer_setInterval(t, 10)elseAdr00A444E8.Active=falsetimer_setInterval(t, 400)endendendendt=createTimer(nil)timer_setInterval(t, 400)timer_onTimer(t, freezeriftwo)timer_setEnabled(t, true)function forsimu(timer)if Adr00A47010.Value~="??" thenif Adr00A47010.Value=="1" thenif forkeys.Value=="0" thenforkeys.Value="1"keyDown(VK_HOME)sleep(100)keyUp(VK_HOME)endelseif Adr00A47010.Value~="??" thenif Adr00A47010.Value=="0" thenif forkeys.Value=="1" thenforkeys.Value="0"keyDown(VK_END)sleep(100)keyUp(VK_END)endendendendendendt2=createTimer(nil)timer_setInterval(t2, 400)timer_onTimer(t2, forsimu)timer_setEnabled(t2, true)
autoAssemble([[globalalloc(Adr00A47010, 4)]])autoAssemble([[globalalloc(example, 4)]])autoAssemble([[globalalloc(Adr00A3F3E5, 4)]])autoAssemble([[globalalloc(Adr00A444E8, 4)]])autoAssemble([[globalalloc(forkeys, 4)]])al = getAddressList()Adr00A3F3E5 = al.getMemoryRecordByDescription("Adr00A3F3E5")Adr00A444E8 = al.getMemoryRecordByDescription("Adr00A444E8")Adr00A47010 = al.getMemoryRecordByDescription("Adr00A47010")forkeys = al.getMemoryRecordByDescription("forkeys")function freezeriftwo(timer)if Adr00A3F3E5.Value~="??" thenif Adr00A444E8.Value~="??" thenif Adr00A3F3E5.Value=="2" thenAdr00A444E8.Active=truetimer_setInterval(t, 10)elseAdr00A444E8.Active=falsetimer_setInterval(t, 400)endendendendt=createTimer(nil)timer_setInterval(t, 100)timer_onTimer(t, freezeriftwo)timer_setEnabled(t, true)function forsimu(timer)if Adr00A47010.Value~="??" thenif Adr00A47010.Value=="1" thenif forkeys.Value=="0" thenforkeys.Value="1"keyDown(VK_CONTROL)keyDown(VK_I)sleep(100)keyUp(VK_I)keyUp(VK_CONTROL)endelseif Adr00A47010.Value~="??" thenif Adr00A47010.Value=="0" thenif forkeys.Value=="1" thenforkeys.Value="0"keyDown(VK_CONTROL)keyDown(VK_U)sleep(100)keyUp(VK_U)keyUp(VK_CONTROL)endendendendendendt2=createTimer(nil)timer_setInterval(t2, 400)timer_onTimer(t2, forsimu)timer_setEnabled(t2, true)
Изменено пользователем AntonVitalievich
Ссылка на комментарий
Поделиться на другие сайты

если значение меняется на НЕ 2, переходит на частоту 400

А если не нужно замораживать, то можно поставить на раз в час 3600000 милисекунд?

Мне нужно немного времени чтоб это все попробовать, не меньше часа.

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

А если не нужно замораживать, то можно поставить на раз в час 3600000 милисекунд?

Мне нужно немного времени чтоб это все попробовать, не меньше часа.

Ты не так понял, это не заморозка переходит на 400, а скрипт. Заморозка прекращается сразу как только Не 2.

Скрипт работает то на 10 то на 400. А заморозка работает только на 10 милисекундах.

 

А вообще я сейчас заметил ошибку в выложенном мною скрипте. Именно - 10 милисекунд, это не частота замораживания адреса, а частота с какой скрипт ставит адрес на заморозку. Хотя достаточно его же один раз заморозить. Зачем же активировать заморозку постоянно, да еще с частотой 10. :)

Надо переделать

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

Кстати да: скрипт где нажимаются кнопки home и end  это должен быть один скрипт,

а отдельный скрипт с заморозкой это должен быть другой скрипт. То есть у них отдельные разные задачи. Извиняюсь, если недостаточно проинформировал.

И control + буква  это отдельный один скрипт, а заморозка отдельный второй скрипт.

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

Кстати да: скрипт где нажимаются кнопки home и end  это должен быть один скрипт,

а отдельный скрипт с заморозкой это должен быть другой скрипт. То есть у них отдельные разные задачи. Извиняюсь, если недостаточно проинфоримровал.

Да, у меня как раз так сделано. Один скрипт на клавиши, другой на заморозку.

 

Вот например

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

autoAssemble([[globalalloc(Adr00A47010, 4)]])autoAssemble([[globalalloc(example, 4)]])autoAssemble([[globalalloc(Adr00A3F3E5, 4)]])autoAssemble([[globalalloc(Adr00A444E8, 4)]])autoAssemble([[globalalloc(forkeys, 4)]])al = getAddressList()Adr00A3F3E5 = al.getMemoryRecordByDescription("Adr00A3F3E5")Adr00A444E8 = al.getMemoryRecordByDescription("Adr00A444E8")Adr00A47010 = al.getMemoryRecordByDescription("Adr00A47010")forkeys = al.getMemoryRecordByDescription("forkeys")

Но как я уже сказал, скрипт на заморозку нужно переделать. Так как он замораживает адрез один раз, а потом просто активирует заморозку каждые 10 милисекунд. А надо что бы само значение морозилось с такой частотой.

function freezeriftwo(timer)if Adr00A3F3E5.Value~="??" thenif Adr00A444E8.Value~="??" thenif Adr00A3F3E5.Value=="2" thenAdr00A444E8.Active=truetimer_setInterval(t, 10)elseAdr00A444E8.Active=falsetimer_setInterval(t, 400)endendendendt=createTimer(nil)timer_setInterval(t, 100)timer_onTimer(t, freezeriftwo)timer_setEnabled(t, true)
function forsimu(timer)if Adr00A47010.Value~="??" thenif Adr00A47010.Value=="1" thenif forkeys.Value=="0" thenforkeys.Value="1"keyDown(VK_CONTROL)keyDown(VK_I)sleep(100)keyUp(VK_I)keyUp(VK_CONTROL)endelseif Adr00A47010.Value~="??" thenif Adr00A47010.Value=="0" thenif forkeys.Value=="1" thenforkeys.Value="0"keyDown(VK_CONTROL)keyDown(VK_U)sleep(100)keyUp(VK_U)keyUp(VK_CONTROL)endendendendendendt2=createTimer(nil)timer_setInterval(t2, 400)timer_onTimer(t2, forsimu)timer_setEnabled(t2, true)
Изменено пользователем NullAlex
Ссылка на комментарий
Поделиться на другие сайты

Получилось.

 

Скрипт на заморозку. Теперь пока не 2, значение с адреса 00A444E8 сохраняется в специально отведенном месте, как стало 2, то процесс сохранения прекращается, начинается процесс  копирование сохраненного обратно, в адрес 00A444E8. Если снова НЕ 2, то снова начинается сохранение.

Сохраняется с частотой 400. Записывается с 10. Можно изменить частоту.

 

Скрипт на заморозку

function freezeriftwo(timer)if Adr00A3F3E5.Value~="??" thenif Adr00A444E8.Value~="??" thenif Adr00A3F3E5.Value=="2" thenAdr00A444E8.Value=savedvalue.Valuetimer_setInterval(t, 10)elsesavedvalue.Value=Adr00A444E8.Valuetimer_setInterval(t, 400)endendendendt=createTimer(nil)timer_setInterval(t, 400)timer_onTimer(t, freezeriftwo)timer_setEnabled(t, true)

 

Второй скрипт без изменений. (скрипт на клавиши)

function forsimu(timer)if Adr00A47010.Value~="??" thenif Adr00A47010.Value=="1" thenif forkeys.Value=="0" thenforkeys.Value="1"keyDown(VK_HOME)sleep(100)keyUp(VK_HOME)endelseif Adr00A47010.Value~="??" thenif Adr00A47010.Value=="0" thenif forkeys.Value=="1" thenforkeys.Value="0"keyDown(VK_END)sleep(100)keyUp(VK_END)endendendendendendt2=createTimer(nil)timer_setInterval(t2, 400)timer_onTimer(t2, forsimu)timer_setEnabled(t2, true)

 

Скрипт ддя флагов и соединения луа с таблицкй

autoAssemble([[globalalloc(Adr00A47010, 4)]])autoAssemble([[globalalloc(example, 4)]])autoAssemble([[globalalloc(Adr00A3F3E5, 4)]])autoAssemble([[globalalloc(Adr00A444E8, 4)]])autoAssemble([[globalalloc(forkeys, 4)]])autoAssemble([[globalalloc(savedvalue, 4)]])al = getAddressList()Adr00A3F3E5 = al.getMemoryRecordByDescription("Adr00A3F3E5")Adr00A444E8 = al.getMemoryRecordByDescription("Adr00A444E8")Adr00A47010 = al.getMemoryRecordByDescription("Adr00A47010")forkeys = al.getMemoryRecordByDescription("forkeys")savedvalue = al.getMemoryRecordByDescription("savedvalue")

 

 

Проект Home End + Freezer

http://rghost.ru/6YBSCRdXb

 

Проек CONTRIOL + буква + Freezer

http://rghost.ru/8GmQRJv4t

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

Первый скрипт который нажимает автоматичемки кнопки "home" и "end" работает после 25 минут проверки отлично.

А что это за savedvalue? пускай будет в таблице?

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

Первый скрипт который нажимает автоматичемки кнопки "home" и "end" работает после 25 минут проверки отлично.

А что это за savedvalue? пускай будет в таблице?

savedvalue нужен. Нужен для того чтобы работал скрипт для заморозки.

Значение из 00A444E8 сохраняется в savedvalue пока в 0A3F3E5 не 2, но когда 00A3F3E5 = 2, тогда запись в savedvalue прекращается, и начинается запись в 00A444E8 из того самого savedvalue. Сначало туда пока не 2, потом обратно оттуда если 2.

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

Попробовал скрипт с control + кнопка работает также хорошо.

А скрипт с заморозкой работает не совсем правильно:

первая версия скрипта с заморозкой работала, но в 20% замораживало неверное значение.

 

Замораживает адрес, но слишком быстро, не тогда когда нужно, когда значение становится 2 в адресе 00A3F3E5 для сравнения, то происходит заморозка того адреса 00A444E8 в котором должно быть 72, но он еще не успел переключиться на 72 и замораживается неверное значение.

 

вторая версия скрипта с заморозкой работает неверно. Попытаюсь обьяснить систему.

Когда в адресе 00A3F3E5 значение = 2, то в адресе 00A444E8 становится 72 и когда становится 72 нужна заморозка,

а перед этим (перед 72) в адресе 00A444E8 было любое другое число ненужное нам,

поэтому из savedvalue не нужно заносить значения потому что они будут не теми , что нужно.

В этой сиситеме как в любом деле есть свои нюансы, и их трудно обьяснить.

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

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

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

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