1 (изменено: bib, 2016-10-18 22:32:12)

Тема: Получить базовый адрес модуля [SAMP]

Здравствуйте. Есть функция:


GetModuleBaseAddr(ModuleName, ProcessID)
{
    if !(hSnapshot := DllCall("CreateToolhelp32Snapshot", "uint", 0x8, "uint", ProcessID))
        return "Error in CreateToolhelp32Snapshot"
 
    NumPut(VarSetCapacity(MODULEENTRY32, (A_PtrSize = 8 ? 48 : 32) + (A_IsUnicode ? 1032 : 516), 0), MODULEENTRY32, "uint")
    if !(DllCall("Module32First", "ptr", hSnapshot, "ptr", &MODULEENTRY32))
        return "Error in Module32First", DllCall("CloseHandle", "ptr", hSnapshot)
 
    ME32 := {}
    while (DllCall("Module32Next", "ptr", hSnapshot, "ptr", &MODULEENTRY32)) {
        if (ModuleName = StrGet(&MODULEENTRY32+ (A_PtrSize = 8 ? 48 : 32), 256, "cp0")) {
            ME32.Addr := NumGet(&MODULEENTRY32+20)
            ME32.Size := NumGet(MODULEENTRY32, (A_PtrSize = 8 ? 32 : 24), "uint")
        }
    }
 
    return ME32, DllCall("CloseHandle", "ptr", hSnapshot)
}

И пример её использования:


ModBase := GetModuleBaseAddr("user32.dll", DllCall("GetCurrentProcessId"))
MsgBox % "modBaseAddr:`t" ModBase.Addr "`nmodBaseSize:`t" ModBase.Size " bytes"

Всё прекрасно работает. Но вот получить базовый адрес samp.dll не получается:


WinGet, PID, PID, GTA:SA:MP
ModBase := GetModuleBaseAddr("samp.dll", PID)
MsgBox % "modBaseAddr:`t" ModBase.Addr "`nmodBaseSize:`t" ModBase.Size " bytes"

В чем ошибка? Заранее спасибо.

2

Re: Получить базовый адрес модуля [SAMP]

Полный адрес библиотеки укажите.

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

3

Re: Получить базовый адрес модуля [SAMP]

teadrinker, тоже не работает.