Code:
#RequireAdmin
#include "[Includes]\NomadMemory.au3"
#include "[Includes]\String.au3"
#include "[Includes]\misc.au3"
SetPrivilege("SeDebugPrivilege", 1)
$ProcModual="Game.exe"
$PID = WinGetProcess("WindowTitle")
$OpenProcMemory = _MemoryOpen($pid)
$CurHPOffset="240"
$MaxHPOffset="238"
$MYhpCurBaseOffset="0007520C"
$MYhpCurBaseOffset1="388"
$MYhpCurBaseOffset2="364"
$MYhpCurBaseOffset3="214"
$MYhpCurBaseOffset4="324"
$BaseAddress="0x"&StringRight(hex(_MemoryModuleGetBaseAddress($pid, $ProcModual) + dec($MYhpCurBaseOffset)),8)
$ReadBaseAddress="0x"&hex(_MemoryRead($BaseAddress, $OpenProcMemory))
$ReadBaseAddress="0x"&StringRight($ReadBaseAddress,8)
$ReadAddress="0x"&hex(_MemoryRead($ReadBaseAddress+dec($MYhpCurBaseOffset1), $OpenProcMemory))
$ReadAddress="0x"&StringRight($ReadAddress,8)
$ReadAddress="0x"&hex(_MemoryRead($ReadAddress+dec($MYhpCurBaseOffset2), $OpenProcMemory))
$ReadAddress="0x"&StringRight($ReadAddress,8)
$ReadAddress="0x"&hex(_MemoryRead($ReadAddress+dec($MYhpCurBaseOffset3), $OpenProcMemory))
$ReadAddress="0x"&StringRight($ReadAddress,8)
$ReadAddress="0x"&hex(_MemoryRead($ReadAddress+dec($MYhpCurBaseOffset4), $OpenProcMemory))
$MYhpBaseAddress="0x"&StringRight($ReadAddress,8)
$TargetMaxValue=_MemoryRead($MYhpBaseAddress+dec($MaxHPOffset), $OpenProcMemory)
$TargetCurValue=_MemoryRead($MYhpBaseAddress+dec($CurHPOffset), $OpenProcMemory)
MsgBox(0,"Test","Target HP= "&$TargetCurValue&"/"&$TargetMaxValue,-1,"")
_MemoryClose($pid)
Exit
#region MemoryModuleGetBaseAddress
Func _MemoryModuleGetBaseAddress($iPID, $sModule)
If Not ProcessExists($iPID) Then Return SetError(1, 0, 0)
If Not IsString($sModule) Then Return SetError(2, 0, 0)
Local $PSAPI = DllOpen("psapi.dll")
;Get Process Handle
Local $hProcess
Local $PERMISSION = BitOR(0x0002, 0x0400, 0x0008, 0x0010, 0x0020) ; CREATE_THREAD, QUERY_INFORMATION, VM_OPERATION, VM_READ, VM_WRITE
If $iPID > 0 Then
Local $hProcess = DllCall("kernel32.dll", "ptr", "OpenProcess", "dword", $PERMISSION, "int", 0, "dword", $iPID)
If $hProcess[0] Then
$hProcess = $hProcess[0]
EndIf
EndIf
;EnumProcessModules
Local $Modules = DllStructCreate("ptr[1024]")
Local $aCall = DllCall($PSAPI, "int", "EnumProcessModules", "ptr", $hProcess, "ptr", DllStructGetPtr($Modules), "dword", DllStructGetSize($Modules), "dword*", 0)
If $aCall[4] > 0 Then
Local $iModnum = $aCall[4] / 4
Local $aTemp
For $i = 1 To $iModnum
$aTemp = DllCall($PSAPI, "dword", "GetModuleBaseNameW", "ptr", $hProcess, "ptr", Ptr(DllStructGetData($Modules, 1, $i)), "wstr", "", "dword", 260)
If $aTemp[3] = $sModule Then
DllClose($PSAPI)
Return Ptr(DllStructGetData($Modules, 1, $i))
EndIf
Next
EndIf
DllClose($PSAPI)
Return SetError(-1, 0, 0)
EndFunc
#endregion