Jump to content

SnowFlake

Members
  • Content Count

    1
  • Joined

  • Last visited

Posts posted by SnowFlake


  1. Hello, this is an example of what you can do with AHK and pointers/reading the games memory, i hope someone finds this useful  :)
     
    Main page:

    http://www.autohotkey.com/board/topic/148284-path-of-exile-reading-pointers-example/
     
    video:


     
    Picture:
    7daaf83ed7.png
     
    links also posted on:
    http://www.autohotke...inters-example/
    http://www.mpgh.net/...4679&p=10802732
    http://www.blizzhack...?f=245&t=502518
     
    scripts/functions i used:
     
    Poe.ahk
    IF NOT A_IsAdmin
    {
       Run *RunAs "%A_ScriptFullPath%"
       ExitApp
    }
    
    #Include, memory.ahk
    #SingleInstance force
    
    ProcessName := "PathOfExile.exe"
    
    hwnd := MemoryOpenFromName(ProcessName)
    
    HP = 
    SH = 
    MA = 
    EX = 
    
    IT = 
    ST = 
    DE = 
    
    Gui, +AlwaysOnTop
    
    Gui, Add, Text,,Life:
    Gui, Add, Text,,Shield:
    Gui, Add, Text,, Mana:
    Gui, Add, Text,, EXP:
    
    Gui, Add, Text,,Intelligence:
    Gui, Add, Text,, Strenght:
    Gui, Add, Text,, Dexterity:
    
    Gui, Add, Edit, ReadOnly vHP_GUI ym
    Gui, Add, Edit, ReadOnly vSH_GUI
    Gui, Add, Edit, ReadOnly vMA_GUI
    Gui, Add, Edit, ReadOnly vEX_GUI
    
    Gui, Add, Edit, ReadOnly vIT_GUI
    Gui, Add, Edit, ReadOnly vST_GUI
    Gui, Add, Edit, ReadOnly vDE_GUI
    Gui, Show, , POE Reader
    
    
    Loop
    {
       
     ; Life,Mana,sheiald,exp  
    HP2 := MemoryReadPointer(hwnd,HP, "int")
    GuiControl,, HP_GUI, %HP2%
    
    SH2 := MemoryReadPointer(hwnd,SH, "int")
    GuiControl,, SH_GUI, %SH2%
    
    MA2 := MemoryReadPointer(hwnd,MA, "int")
    GuiControl,, MA_GUI, %MA2%
    
    EX2 := MemoryReadPointer(hwnd,EX, "int")
    GuiControl,, EX_GUI, %EX2%
    
    ; inteletins,srange,dexter
    IT2 := MemoryReadPointer(hwnd,IT, "int")
    GuiControl,, IT_GUI, %IT2%
    
    ST2 := MemoryReadPointer(hwnd,ST, "int")
    GuiControl,, ST_GUI, %ST2%
    
    DE2 := MemoryReadPointer(hwnd,DE, "int")
    GuiControl,, DE_GUI, %DE2%
    }
    return
    

    memory.ahk

    MemoryOpenFromPID(PID, Privilege=0x1F0FFF)
    {
    	HWND := DllCall("OpenProcess", "Uint", Privilege, "int", 0, "int", PID)
    	return HWND
    }
    
    MemoryOpenFromName(Name, Privilege=0x1F0FFF)
    {
    	Process, Exist, %Name%
    	PID := ErrorLevel
    	Return MemoryOpenFromPID(PID, Privilege)
    }
    
    MemoryOpenFromTitle(title, privilege=0x1F0FFF)
    {
    	WinGet, PID, PID, %title%
    	Return MemoryOpenFromPID(PID, Privilege)
    }
    
    MemoryClose(hwnd)
    {
    	return DllCall("CloseHandle", "int", hwnd)
    }
    
    MemoryWrite(hwnd, address, writevalue, datatype="int", length=4, offset=0)
    {
    	VarSetCapacity(finalvalue, length, 0)
    	NumPut(writevalue, finalvalue, 0, datatype)
    	return DllCall("WriteProcessMemory", "Uint", hwnd, "Uint", address+offset, "Uint", &finalvalue, "Uint", length, "Uint", 0)
    }
    
    MemoryRead(hwnd, address, datatype="int", length=4, offset=0)
    {
    	VarSetCapacity(readvalue,length, 0)
    	DllCall("ReadProcessMemory","Uint",hwnd,"Uint",address+offset,"Str",readvalue,"Uint",length,"Uint *",0)
    	finalvalue := NumGet(readvalue,0,datatype)
    	return finalvalue
    }
    
    MemoryWritePointer(hwnd, base, writevalue, datatype="int", length=4, offsets=0, offset_1=0, offset_2=0, offset_3=0, offset_4=0, offset_5=0, offset_6=0, offset_7=0, offset_8=0, offset_9=0)
    {
    	B_FormatInteger := A_FormatInteger 
    	Loop, %offsets%
    	{
    		baseresult := MemoryRead(hwnd,base)
    		Offset := Offset_%A_Index%
    		SetFormat, integer, h
    		base := baseresult + Offset
    		SetFormat, integer, d
    	}
    	SetFormat, Integer, %B_FormatInteger%
    	return MemoryWrite(hwnd,address,writevalue,datatype,length)
    }
    
    MemoryReadPointer(hwnd, base, datatype="int", length=4, offsets=0, offset_1=0, offset_2=0, offset_3=0, offset_4=0, offset_5=0, offset_6=0, offset_7=0, offset_8=0, offset_9=0)
    {
    	B_FormatInteger := A_FormatInteger 
    	Loop, %offsets%
    	{
    		baseresult := MemoryRead(hwnd,base)
    		Offset := Offset_%A_Index%
    		SetFormat, integer, h
    		base := baseresult + Offset
    		SetFormat, integer, d
    	}
    	SetFormat, Integer, %B_FormatInteger%
    	return MemoryRead(hwnd,base,datatyp,length)
    }
    
    MemoryGetAddrPID(PID, DllName)
    {
        VarSetCapacity(me32, 548, 0)
        NumPut(548, me32)
        snapMod := DllCall("CreateToolhelp32Snapshot", "Uint", 0x00000008, "Uint", PID)
        If (snapMod = -1)
            Return 0
        If (DllCall("Module32First", "Uint", snapMod, "Uint", &me32))
    	{
    		Loop
           	{
                If (!DllCall("lstrcmpi", "Str", DllName, "UInt", &me32 + 32)) {
                    DllCall("CloseHandle", "UInt", snapMod)
                    Return NumGet(&me32 + 20)
                }
            }
    		Until !DllCall("Module32Next", "Uint", snapMod, "UInt", &me32)
        }
        DllCall("CloseHandle", "Uint", snapMod)
        Return 0
    }
    
    MemoryGetAddrName(Name, DllName)
    {
    	Process, Exist, %Name%
    	PID := ErrorLevel
    	Return MemoryGetAddrPID(PID, DllName)
    }
    
    MemoryGetAddrTitle(Title, DllName)
    {
    	WinGet, PID, PID, %Title%
    	Return MemoryGetAddrPID(PID, DllName)
    }
    
    SetPrivilege(privilege = "SeDebugPrivilege")
    {
    	success := DllCall("advapi32.dll\LookupPrivilegeValueA","uint",0,"str",privilege,"int64*",luid_SeDebugPrivilege)
    	if (success = 1) && (ErrorLevel = 0)
    	{
    		returnval = 0
    	}
    	else
    	{
    		returnval = %ErrorLevel%
    	}
    	return %returnval%
    }
    
    SuspendProcess(hwnd)
    {
    	return DllCall("ntdll\NtSuspendProcess","uint",hwnd)
    }
    
    ResumeProcess(hwnd)
    {
    	return DllCall("ntdll\NtResumeProcess","uint",hwnd)
    }
    

    Cheat engine.ahk

    IF NOT A_IsAdmin
    {
       Run *RunAs "%A_ScriptFullPath%"
       ExitApp
    }
    
    
    Cheat_Engine_Dynamic_Pointer_Catcher(CH_Path,CH_title,Exe_name,Game_tile,vlaue,move_dir,vlaue2)
    {
    SoundBeep 
    WinMinimizeAll
    WinActivate, %Game_tile%
    Run, %CH_Path%
    WinWaitActive, %CH_title%
    Winmove,%CH_title%,,0,0,50,50
    
    ControlClick, Window3, %CH_title%,,,, NA
    Sleep, 500
    ControlFocus, LCLListBox1, %CH_title%
    Sleep, 500
    Send, %Exe_name%
    Sleep, 1000
    Send, {enter}
    ControlSetText, Edit1, %vlaue%, %CH_title%
    Sleep, 500
    ControlClick, Button15, %CH_title%,,,, NA
    
    Loop
    {
    ControlGetText, Button15_1, Button15,%CH_title% 
    IF (Button15_1 = "New Scan")
    {
    WinActivate, %Game_tile%
    WinWaitActive, %Game_tile%
    Sleep, 500
    Send, {%move_dir%}
    break
    }
    }
    
    WinActivate, %CH_title%
    ControlGetText, Button15, Button15,%CH_title%
    
    Loop
    {
    IF (Button15 = "New Scan")
    {
    ControlSetText, Edit1,%vlaue2%, %CH_title%
    Sleep, 500
    ControlClick, Button6, %CH_title%,,,, NA
    Sleep, 500
    
    ControlClick, x32 y115, %CH_title%,,,, NA
    ControlClick, x32 y115, %CH_title%,,,, NA
    Sleep, 400
    Click 225, 423, 2
    Sleep, 400
    send, {ctrl down}
    send, {C}
    send, {ctrl up}
    
    Process,Close,cheatengine-x86_64.exe
    Process,Close,cheatengine-i386.exe
    Process,Close,Cheat Engine.exe
    
    NormPoint := Clipboard
    coord1 := format( "0x{}", format( "{}", "0x" clipboard ) ) 
    Clipboard = %NormPoint%
    FileAppend,Pointer: %NormPoint%`nHex Pointer: %coord1%`n`n,%Game_tile%_Dynamic_pointers.ini
    TrayTip,%CH_title% Dynamic Pointer Catcher, Catched it!`n`nPointer: %NormPoint%`nHex Pointer: %coord1%,3
    break
    }
    
    }
    }
    ExitApp
    return
    
    Escape::ExitApp
    
×
×
  • Create New...