[VB] Pointer in Nostale auslesen

03/09/2011 12:14 bvz#1
Ich frag mal die Programmierer unter euch,die vll nen Plan haben wie ich das hinkrieg.
Folgendes Problem :

Ich will die Hp Adresse : 007B11A8 mit den beiden Offsets : 4C,AC in VB zum laufen kriegen.

Mein Modul(Memory) sieht so aus :

Code:
 Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
    Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    Private Declare Function WriteFloatMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    Private Declare Function ReadFloat Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByRef buffer As Single, ByVal size As Int32, ByRef lpNumberOfBytesRead As Int32) As Boolean
    Private Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Integer) As Integer
    Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    Public RBuff As Long
    Public RBuff2 As Single
    Public RBuff3 As Integer


  Public Function ReadLongPointer(ByVal ProcessName As Process, ByVal Base As Integer, ByVal Offset As Short, ByVal Offset2 As Short, ByVal Bytes As Integer)

        Dim fullAddress As Long

        Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)

        If GameLookUp.Length = 0 Then

            End

        End If

        Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)

        ReadProcessMemory(processHandle, Base, RBuff, 4, Nothing)

        fullAddress = RBuff + Offset + Offset2

        ReadProcessMemory(processHandle, fullAddress, RBuff3, Bytes, Nothing)

        Return RBuff3

        CloseHandle(processHandle)

    End Function

So im Hauptprogramm bei Button 1:

Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim p As Process() = Process.GetProcessesByName("NostaleX.dat")
        If Not p.Length = 0 Then
            Label2.Text = Memory.ReadLongPointer(p(0), &H7B11A8, 76, 172, "4")  'Process "p" , Adresse , Offset ,Offset2, Byte
        Else
            MsgBox("Nostale ist nicht geöffnet!")
        End If
    End Sub
Hier habt ihr die neuste Hp Adresse aus Nostale De :




Hab mal versucht die Hex Zahlen in Dezimalzahlen zu schreiben scheint auch nicht zu funktionieren...
Manchmal bekomm ich ein Wert raus,der sich immer ändert und total falsch ist..
Hoffe jemand kann mir helfen :D
Ich habs nicht in den Code Bereich gepostet ,weils hier eh ein paar Experten gibt ;)
03/12/2011 16:53 Pokerlight#2
use autoit
Visual basic not work whit nostale