1 (изменено: Patriccc, 2011-06-19 21:46:25)

Тема: AHK: запуск скрипта при изменении значения в адресе

Возможно-ли создать скрипт, который при изменении значения в адресе 0xXXXXXXXX, будет запускать подскрипт(скрипт, находящийся в том-же файле скрипта), обозначеный этим значением.
Пример:
Я запускаю скрипт и игру, номер карты: 10, запускается подскрипт, который проходит карту 10, номер изменяется на:113, запускается подскрипт который проходит карту 113, и т.д.
Если это возможно то скажите, какими командами мне придется пользоваться, а если вы хотите сильно помочь - создайте пример скрипта, благодарю.

2

Re: AHK: запуск скрипта при изменении значения в адресе

...а если вы хотите получить ответ то попытайтесь почитать правила форума.

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

3

Re: AHK: запуск скрипта при изменении значения в адресе

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

4

Re: AHK: запуск скрипта при изменении значения в адресе

2 Patriccc Как-то не внятно выражена мысль.

5

Re: AHK: запуск скрипта при изменении значения в адресе

Извините за неудобства.
Вот переделаный пример.
В адресе C62E9516 стоит значение 10(номер карты 10), скрипт автоматически запускает прохождение этой карты с помощъю того-же скрипта, карта пройдена, значение изменяется на 113, запускается прохождение карты 113 и т.д.
Возможно ли данный скрипт создать? Если да, то скажите команды, которыми мне прийдется пользоваться.

6 (изменено: alexii, 2011-06-20 15:34:26)

Re: AHK: запуск скрипта при изменении значения в адресе

Использован скрипт из этой темы: Серый форум / AHK: Доступ к памяти других процессов

#NoEnv

ProcessName = Game.exe         ; Имя процесса.
ReadAddress = 0x180000000          ; Адрес, откуда читать.
ReadSize = 4
ResultEx = 1
VarSetCapacity(Buf, ReadSize, 0)

PROCESS_VM_READ = 0x10

Process, Exist, %ProcessName%

If(!ErrorLevel) {
  MsgBox, Процесс не найден.
  ExitApp
}

PID := ErrorLevel

hProcess := DllCall("OpenProcess", UInt, PROCESS_VM_READ
                                 , Int, False
                                 , UInt, PID)
If(!hProcess) {
  MsgBox, Не удалось открыть процесс.
  ExitApp
}

Loop
{
    
    Sleep, 10
    Ret := DllCall("ReadProcessMemory", UInt, hProcess
                                , UInt, ReadAddress
                                , UInt, &Buf
                                , UInt, ReadSize
                                , UInt, 0)
                                
    Result := NumGet(Buf, 0, "UInt")
    if Result != %ResultEx%
    {
        ResultEx := Result
        Run, %Result%.ahk
    }    
}

7 (изменено: alexii, 2011-06-20 15:35:32)

Re: AHK: запуск скрипта при изменении значения в адресе

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

27::
  MouseMove  841, 179
  Send, {Down}{Ctrl}{Shift}
  Send, !{Tab}
  Send, {Down}{Ctrl}{Shift}
  Send, !{Tab}
return
 45::
  MouseMove  360, 183
  Send, {Down}{Ctrl}{Shift}
  Send, !{Tab}
  Send, {Down}{Ctrl}{Shift}
  Send, !{Tab}
return

27,45-номера карт.
Я так понял, файл с прохождением надо назвать, как хочешь(Example.ahk) , но потом изменить

Run, %Result%.ahk

на

Run, Example.ahk

?

8

Re: AHK: запуск скрипта при изменении значения в адресе

Вы ведь говорили что файлы будут с именами 1.ahk 2.ahk 3.ahk итд.
В переменной Result хранится значение адреса, который вы указали.

9

Re: AHK: запуск скрипта при изменении значения в адресе

Городить огород из скриптов - не тру.
Данный метод хорош лишь в случае с расширяющими plugin'ами (для новых карт).
Оптимальнее всего использовать такой алгоритм:
1) основной цикл - обработка ячейки памяти и вызов процедуры прохождения соответствующей карты;
2) процедура прохождения карты с вашим кодом обозначенным выше
3) По окончании карты происходит возврат из процедуры и цикл повторяется.

10

Re: AHK: запуск скрипта при изменении значения в адресе

Всем спасибо за помощ.