ReadProcessMemory

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Bady.

    ReadProcessMemory

    Moin.
    Hab folgendes Problem... ich bekomm den Value Wert von der Adresse nicht angezeigt und ich weiß nicht warum.
    Ev. hat jemand von euch mit mir Erbarmen und sieht sich das mal an woran es liegen könnte.

    Declare :

    VB.NET-Quellcode

    1. Private Declare Function ReadProcessMemory Lib "Kernel32" (ByVal Handel As Integer, ByVal Adress As Integer, ByVal Value As Long, ByVal Size As Long, ByRef byteswritten As Long) As Long


    Aufruf:

    VB.NET-Quellcode

    1. Dim name As String = "Solitaire"
    2. Dim hprocess As Process() = Process.GetProcessesByName(name)
    3. Dim adress As Integer = &H3BA4D4
    4. Dim currentscore As String
    5. ReadProcessMemory(hprocess(0).Handle, adress, currentscore, 4, 0)
    6. Label1.Text = currentscore


    Hab das aus nem YT-Video.

    MFG
    GOOGLE ist mein Meister :)
    Danke sehr hab die neue Decl. aber bekomm dennoch keinen Wert zurück.

    VB.NET-Quellcode

    1. Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByVal lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer

    Aufruf:

    VB.NET-Quellcode

    1. Dim name As String = "Solitaire"
    2. Dim hprocess As Process() = Process.GetProcessesByName(name)
    3. Dim adress As Integer = &H43A4D4
    4. Dim currentscore As String
    5. ReadProcessMemory(hprocess(0).Handle, adress, currentscore, 4, 0)
    6. Label1.Text = currentscore

    Könntest du mir sagen warum und wie ich die decl. zu verstehen habe?

    Danke schön

    MFG
    GOOGLE ist mein Meister :)
    So ich hab folgendes rausgefunden:

    Unter windows Xp funktioniert es wunderbar mit:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    3. Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
    4. Public 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
    5. Const PROCESS_ALL_ACCESS = &H1F0FFF
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. Label1.Text = ReadMemory(TextBox1.Text, TextBox2.Text)
    8. End Sub
    9. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    10. Dim name As String = TextBox1.Text
    11. Dim hProcessx As Process() = Process.GetProcessesByName(name)
    12. Dim adress As Integer = TextBox2.Text
    13. Dim value As String = TextBox3.Text
    14. WriteProcessMemory(hProcessx(0).Handle, adress, CInt(value), 4, 0)
    15. End Sub
    16. Public Function ReadMemory(ByVal Proces As String, ByVal Adress As Integer) As Integer
    17. Dim Handle As IntPtr
    18. Dim myProcesses() As Process = Process.GetProcessesByName(Proces)
    19. If myProcesses.Length = 0 Then
    20. Exit Function
    21. End If
    22. Dim processHandle As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, myProcesses(0).Id)
    23. If processHandle = IntPtr.Zero Then
    24. Exit Function
    25. End If
    26. Dim Buf As Integer
    27. If ReadProcessMemory(processHandle, Adress, Buf, 4, 0) Then
    28. Return Buf
    29. End If
    30. Return 0
    31. End Function
    32. End Class


    Jedoch funtioniert das Lesen nur bei Windows XP undnicht auf Windows 7 bzw Vista
    Schreiben funtioniert unter beiden Betriebssystemen.

    Weiß jemand warum?

    MFG

    EDIT:

    Ich denke das es an 32 64 bit versionen von windows liegt.
    hatte win XP 32 getestet und ging ... Win7 64bit nicht.

    Könnt mir einer verraten wie ich meine anwendung jetzt in eine 64 bit version umschreibe?

    MFG
    GOOGLE ist mein Meister :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bady“ ()

    Thema hat sich erledigt danke.

    Für die anderen der Thread hilft weiter ;)

    [VB 2008] Daten aus Spiel auslesen?

    MFG
    GOOGLE ist mein Meister :)