1 (изменено: Drygok, 2017-08-11 15:55:48)

Тема: AHK: Чтение строки из памяти

Здравствуйте! Опять мне нужна помощь (да-да). В чем дело: есть у меня процесс (grand_theft_auto_san_andreas.dll) - сама игра. Она же использует файл (san_andreas_multiplayer.dll). В диспетчере только процесс. Используя CheatEngine, я нашел статический адрес строки (san_andreas_multiplayer.dll+122EF8), но вот как прочитать это из процесса? Или файл - и есть адрес, а 122EF8 -- указатель?

В общем, ничего не понятно. Если читать прямо так строку через AHK -- возвращает ошибку, естественно. Буду благодарен за готовый код.

Читаю строку так.

readString(hProcess, dwAddress, dwLen) {
    if(!hProcess) {
        ErrorLevel := ERROR_INVALID_HANDLE
        return 0
    }
    
    VarSetCapacity(sRead, dwLen)
    dwRet := DllCall(    "ReadProcessMemory"
                        , "UInt", hProcess
                        , "UInt", dwAddress
                        , "Str", sRead
                        , "UInt", dwLen
                        , "UInt*", 0
                        , "UInt")
    if(dwRet == 0) {
        ErrorLevel := ERROR_READ_MEMORY
        return 0
    }
ууу

2 (изменено: belyankin12, 2017-08-11 17:09:57)

Re: AHK: Чтение строки из памяти

Какую строку тебе необходимо получить? Сейчас есть функции для почти всех возможных диалогов. В твоем же UDF они есть наверняка.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

3 (изменено: Drygok, 2017-08-11 21:27:35)

Re: AHK: Чтение строки из памяти

belyankin12 пишет:

Какую строку тебе необходимо получить? Сейчас есть функции для почти всех возможных диалогов. В твоем же UDF они есть наверняка.

Последняя введенная игроком команда. В том то и дело, что это не SAMP, a CRMP, и тут не работают никакие функции, использующие модуль san_andreas_multiplayer.dll (samp.dll из samp). Чтобы работали хотя бы функции, связанные с самой ГТА помучаться пришлось, а тут вообще.

ууу

4

Re: AHK: Чтение строки из памяти

А.. вот в чем дело. Скорее всего у тебя будет так: readString(hGTA, dwAddress + 122EF8, какое-то число). Я не представляю просто что нужно указывать третьим аргументом..

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

5

Re: AHK: Чтение строки из памяти

belyankin12, третий аргумент - количество символов в строке, но не суть. Мне нужно не эту функцию использовать, а получить dwAddress так, чтобы это работало.

ууу