1 (изменено: AlexMK, 2013-04-16 18:53:08)

Тема: Как вычислить адрес переменной в процессе?

Собственно САБЖ. Есть urpa, мне нужно выполнять действие, пока определенная переменная не примет заданное значение. Помогите советом или ссылочками.

2 (изменено: creature.ws, 2013-04-16 11:53:55)

Re: Как вычислить адрес переменной в процессе?

Собственно, не сочтите за придирку, но какое отношение вопрос имеет к autohotkey? То, что вы желаете чтоб задача была решена с использованием autohotkey — не считается. Вы уже начали писать скрипт с требуемой функциональностью на autohotkey? Приведите код, отражающий текущее состояние работы. Не начали? Совет — используйте CE

3

Re: Как вычислить адрес переменной в процессе?

Для определения адреса используйте программу ArtMoney, она под это заточена. Если сумеете адрес найти, тогда и можно будет говорить о выполнении действия.

4

Re: Как вычислить адрес переменной в процессе?

YMP пишет:

Для определения адреса используйте программу ArtMoney, она под это заточена. Если сумеете адрес найти, тогда и можно будет говорить о выполнении действия.

Art Money  как вариант я рассматривал, но на сколько я разобрался с её функциями, она заменят переменную ножной цифрой или может её заморозить в нужном значении. А мне нужно просто кликать в одно место, пока цифра не примет нужное значение. Конечно можно привязаться к изображению, но я не умелый пользователь ахк. Вот и прошу ссылки на похожие темы, и я не просил готовых решений.

5 (изменено: YMP, 2013-04-16 12:54:19)

Re: Как вычислить адрес переменной в процессе?

ArtMoney я вам посоветовал для определения адреса. Вы это уже сделали? Адрес определили? Мы же за вас не сможем его определить. А без адреса что и где вы будете смотреть?

6

Re: Как вычислить адрес переменной в процессе?

Конечно можно привязаться к изображению

Приведите хотя-бы изображение.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: Как вычислить адрес переменной в процессе?

serzh82saratov пишет:

Конечно можно привязаться к изображению

Приведите хотя-бы изображение.

Куда? Копипаст на форум? о чем речь?

8

Re: Как вычислить адрес переменной в процессе?

Например как тут

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9 (изменено: AlexMK, 2013-04-16 18:54:25)

Re: Как вычислить адрес переменной в процессе?

serzh82saratov пишет:

Например как тут

Это будет скриншот из urpы, он сейчас ничего не даст. Игра ММО, так что просто подменить значение в клиенте ничего не даст, а если даст то, скорее всего, только бан. Я не хочу взламывать клиент и что то в нем править, а что я хочу писал выше.

10

Re: Как вычислить адрес переменной в процессе?

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

ImageSearch

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11 (изменено: creature.ws, 2013-04-16 16:13:34)

Re: Как вычислить адрес переменной в процессе?

а что я хочу писал выше

Отличная формулировка «я всё сказал, теперь ваш черёд».

Примеры использования ReadProcessMemory
Нужно знать адрес откуда читать данные.

Как осуществляется поиск в памяти конкретного процесса, демонстрирует artmoney и cheat engine. Cомневаюсь, что имеет смысл повторять их функциональность скриптом на autohotkey.

12

Re: Как вычислить адрес переменной в процессе?

creature.ws пишет:

а что я хочу писал выше

Отличная формулировка «я всё сказал, теперь ваш черёд».

Примеры использования ReadProcessMemory
Нужно знать адрес откуда читать данные.

Как осуществляется поиск в памяти конкретного процесса, демонстрирует artmoney и cheat engine. Cомневаюсь, что имеет смысл повторять их функциональность скриптом на autohotkey.

ты всё по делу сказал, но вот заняться все чем вы сказали я могу только сейчас, до этого был на работе.

13

Re: Как вычислить адрес переменной в процессе?

AlexMK пишет:

Собственно САБЖ. Есть игра, мне нужно выполнять действие, пока определенная переменная не примет заданное значение. Помогите советом или ссылочками.

Ещё раз говорю, что форум не посвящён urpaм. Тематических форумов хватает. Хотя бы уберите слово "urpa" в названии темы и сообщениях.
Вычислить адрес нужной ячейки памяти невозможно, он не подчиняется формулам. Можно найти его при помощи логики и метода тыка. Но это уже совсем другая история, читайте документацию к Аrтмonеу.

По существу: вопрос неоднократно поднимался, был успешно решён. Вам достаточно было провести поиск в разделах "AutoHotkey - разработка" и "AutoHotkey - коллекция" по слову "память":
http://forum.script-coding.com/viewtopic.php?id=5966
http://forum.script-coding.com/viewtopic.php?id=2734

14 (изменено: AlexMK, 2013-04-16 18:55:27)

Re: Как вычислить адрес переменной в процессе?

Я конечно все понимаю, но я человек начинающий с ахк. Ну вот откуда мне взять нужную крупицу из всех тон информации? гуглил как мог, может я да же вопрос не правильно поставил. Есть ситуация, которую я хотел бы, разобравшись, решить с помощью АХК. Так если это urpa, то всё? Табу? На этом форуме с такими делами не помогают?

15

Re: Как вычислить адрес переменной в процессе?

AlexMK пишет:

Я конечно все понимаю, но я человек начинающий с ахк.

В каком смысле?

AlexMK пишет:

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

AlexMK пишет:

Есть ситуация, которую я хотел бы, разобравшись, решить с помощью АХК.

Так это... Поставьте для начала вопрос правильно. А там, глядишь, и AutoHotkey не понадобится.

AlexMK пишет:

Так если это игра, то всё? Табу? На этом форуме с такими делами не помогают?

Это частный случай. Но форум посвящён скриптовым языкам, не следует превращать его в "конференцию 4uтеpoB".

16

Re: Как вычислить адрес переменной в процессе?

ypppu пишет:

Но форум посвящён скриптовым языкам, не следует превращать его в "конференцию 4uтеpoB".

По-моему, вы перебарщиваете в этой антиигровой политике. Вопросы по играм время от времени появляются уже давно, но форум в эту самую конференцию так и не превратился. Почему вдруг теперь должен превратиться?

17

Re: Как вычислить адрес переменной в процессе?

Тема популярна. Стараюсь сдерживать поток вопросов по играм, но они появляются всё чаще, кто-то даже предлагал создать специальный раздел. Эта тема - живой пример: что-то потребовалось для игры --> зашёл на script-coding.com --> задал вопрос и жду помощи. В этой цепочке просматривается прочная ассоциация между "хитростями в играх" и AutoHotkey среди геймеров.
А может у меня что-то с головой? Могу прекратить гонения и посмотрим, что будет с форумом через год.

18

Re: Как вычислить адрес переменной в процессе?

Ладно, если теме быть - я продолжу, а нет - удаляйте. Не поможете, то и смысла пользоваться АХК для меня нет, всяко мне неоткуда помощи ждать. На форуме тогда не появлюсь, но думаю здесь и без меня всё будет хорово.

Буду говорить туманно, что бы не обвинили еще и в рекламе.

И так скачав СЕ попробовал на внутренней валюте, адрес перенес, всё отображается четко. Но не валюта моя цель.

Цель - некий предмет который, с шансом 50/50, можно улучшить на +1 или сбросить текущее значение на 0.
Шанс сделать с нуля:
+1=100/2^1
+2=100/2^2
+3=100/2^3
и т.д.

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

19 (изменено: creature.ws, 2013-04-16 22:02:30)

Re: Как вычислить адрес переменной в процессе?

не нашел я эту цифру в процессе

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

20

Re: Как вычислить адрес переменной в процессе?

И так, я всё же нашел адрес нужной переменной, но она оказалась суммой двух других.  х)

Я не силен в синтаксисе, но попробую.


#NoEnv

ProcessName = urpa.exe         ; Имя процесса. <----- тут мне понятно
ReadAddress = 2ECD0254          ; Адрес, откуда читать. <-----адрес моей переменной
ReadSize = 4                      ; Сколько байт читать.
VarSetCapacity(Buf, ReadSize, 0)  ; Буфер, куда считывать.<------ вот тут мне не понятно

Если мне правильно ясна логика:
1. весь скрипт нужно привязать на клавишу, допустим Numpad0
2. указать имя процесса, адрес переменной
3. присвоить переменной символ, допустим X
4. кликать мышкой в определенные координаты, если X<10(допустим)

Я верно мыслю?

21 (изменено: creature.ws, 2013-04-16 23:21:22)

Re: Как вычислить адрес переменной в процессе?

processName := "имя процесса"
readAddress := 0x2ECD0254

Numpad0::
    if ProcessReadMemory(readAddress, processName) < 10
        Click 123 234
    return


ProcessReadMemory(address, processIDorName, type := "Int", numBytes := 4) {
    VarSetCapacity(buf, numBytes, 0)

    Process Exist, %processIDorName%
    if !processID := ErrorLevel
        throw Exception("Invalid process name or process ID:`n`n""" . processIDorName . """")

    if !processHandle := DllCall("OpenProcess", "Int", 24, "UInt", 0, "UInt", processID, "Ptr")
        throw Exception("Failed to open process.`n`nError code:`t" . A_LastError)

    result := DllCall("ReadProcessMemory", "Ptr", processHandle, "Ptr", address, "Ptr", &buf, "Ptr", numBytes, "PtrP", numBytesRead, "UInt")

    if !DllCall("CloseHandle", "Ptr", processHandle, "UInt") && !result
        throw Exception("Failed to close process handle.`n`nError code:`t" . A_LastError)

    if !result
        throw Exception("Failed to read process memory.`n`nError code:`t" . A_LastError)

    if !numBytesRead
        throw Exception("Read 0 bytes from the`n`nprocess:`t" . processIDorName . "`naddress:`t" . address)

    return (type = "Str")
        ? StrGet(&buf, numBytes)
        : NumGet(buf, type)
}

22

Re: Как вычислить адрес переменной в процессе?

ypppu

+ offtopic
ypppu пишет:

Стараюсь сдерживать поток вопросов по играм, но они появляются всё чаще

У меня нет такого ощущения. Всё как всегда было. Если не ошибаюсь, я тут с 2006 года. Вопросы про игры были всегда, но люди с такими вопросами на форуме не задерживаются. Появился, спросил и исчез.

ypppu пишет:

Могу прекратить гонения и посмотрим, что будет с форумом через год.

Поддерживаю. Критерий истины — практика.

23

Re: Как вычислить адрес переменной в процессе?

YMP

+ открыть спойлер
YMP пишет:

ypppu

ypppu пишет:

Могу прекратить гонения и посмотрим, что будет с форумом через год.

Поддерживаю. Критерий истины — практика.

Эксперимент объявляю начатым.

24

Re: Как вычислить адрес переменной в процессе?

creature.ws пишет:
processName := "имя процесса"
readAddress := 0x2ECD0254

Numpad0::
    if ProcessReadMemory(readAddress, processName) < 10
        Click 123 234
    return


ProcessReadMemory(address, processIDorName, type := "Int", numBytes := 4) {
    VarSetCapacity(buf, numBytes, 0)

    Process Exist, %processIDorName%
    if !processID := ErrorLevel
        throw Exception("Invalid process name or process ID:`n`n""" . processIDorName . """")

    if !processHandle := DllCall("OpenProcess", "Int", 24, "UInt", 0, "UInt", processID, "Ptr")
        throw Exception("Failed to open process.`n`nError code:`t" . A_LastError)

    result := DllCall("ReadProcessMemory", "Ptr", processHandle, "Ptr", address, "Ptr", &buf, "Ptr", numBytes, "PtrP", numBytesRead, "UInt")

    if !DllCall("CloseHandle", "Ptr", processHandle, "UInt") && !result
        throw Exception("Failed to close process handle.`n`nError code:`t" . A_LastError)

    if !result
        throw Exception("Failed to read process memory.`n`nError code:`t" . A_LastError)

    if !numBytesRead
        throw Exception("Read 0 bytes from the`n`nprocess:`t" . processIDorName . "`naddress:`t" . address)

    return (type = "Str")
        ? StrGet(&buf, numBytes)
        : NumGet(buf, type)
}

попробовал... никакой реакции... бида

25

Re: Как вычислить адрес переменной в процессе?

OFF:

YMP пишет:

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

Интересный момент за время наблюдений. Сегодня начато три новых темы в ветке AutoHotkey, посвящённых играм.

26

Re: Как вычислить адрес переменной в процессе?

Ну, мало ли какие моменты бывают. Засилия игроманов вроде нет.

27

Re: Как вычислить адрес переменной в процессе?

ypppu пишет:

YMP

+ открыть спойлер
YMP пишет:

ypppu

ypppu пишет:

Могу прекратить гонения и посмотрим, что будет с форумом через год.

Поддерживаю. Критерий истины — практика.

Эксперимент объявляю начатым.

Off: Помоему года ждать ненужно. Все и так очевидно...

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

28

Re: Как вычислить адрес переменной в процессе?

А эксперимент только игроманов касается?

Ходит Спесь, надуваючись, С боку на бок переваливаясь. Ростом-то Спесь аршин с четвертью, Шапка-то на нём во целу сажень, Пузо-то его всё в жемчуге, Сзади-то у него раззолочено... Идет Спесь, видит: на небе радуга; Повернул Спесь во другую сторону: Не пригоже-де мне нагибатися!
А. К. Толстой

29

Re: Как вычислить адрес переменной в процессе?

+ Итоги эксперимента

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

http://forum.script-coding.com/misc.php?action=pun_attachment&amp;item=703&amp;download=0

30

Re: Как вычислить адрес переменной в процессе?

OFF: Картинки, приаттаченные к форуму, обычно грузятся очень медленно, лучше пользоваться сторонними ресурсами.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

31

Re: Как вычислить адрес переменной в процессе?

ypppu пишет:
+ Итоги эксперимента

...

+ Итоги эксперимента c точки зрения отдельно взятого меня

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