Ich hoffe ihr könnt mir vllt vieleicht weiterhelfen, ich befasse mich schon seit einigen Tagen mit ReadProcessMemory und WriteProcessMemory
aber irgendwie will das ganze nicht unter Vista 64 Bit nicht funktionieren. Nachfolgender Code tut zb den Puktestand in Solitaire auslesen und in einer Textbox anzeigen. (Ist ja nur ein Beispiel) unter XP funktioniert das ganze ohne Probleme, aber unter Vista bekomme ich immer den Wert 0 zurück. Mir ist klar das die Speicheradresse unter Vista anders ist, und auch der ProcessName ist unter Vista "Solitaire" und nicht wie bei XP "Sol" die Speicheradressen habe ich voher mittels Cheat-Engine ausglesen und sind auch richtig. Trotzdem geht das unter Vista 64 Bit einfach nicht. Was muss ich ändern oder andres machen damit das ganze auch unter Vista64 läuft, es kann doch eigentlich nicht sein das man unter Vista den Speicher nicht lesen kann, oder? das mit "WriteProcessMemory"
habe ich noch garnicht getestet, Weil wenn ich nicht lesen kann brauche ich auch nicht schreiben versuchen. Bin mittlerweile echt am verzweifeln. Wäre schön wenn sich einer meiner Sache mal animmt
Hier mal das Beispiel ,das so wie es ist unter XP ohne Probleme läuft:
Code:
Visual Basic Quellcode Public Class Form1 Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Integer) As Integer 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 Dim ExeName As String = "sol" '!!Ohne ".exe"!! Dim Prozess1 As Process Public RBuff As Long Dim pList() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses 'liste aller activen Processe Public Function ReadLong(ByVal ProcessName As Process, ByVal Address As Integer) 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, Address, RBuff, 4, Nothing) CloseHandle(processHandle) Return RBuff End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click pList = System.Diagnostics.Process.GetProcesses For Each proc As System.Diagnostics.Process In pList 'Dim Name As String = proc.ProcessName 'ListBox1.Items.Add(Name) If proc.ProcessName = ExeName Then Prozess1 = proc Label1.ForeColor = Color.Green Label1.Text = "Spiel gefunden" TextBox1.Text = ReadLong(Prozess1, "&H000AA830")'Punktestand Exit Sub End If Label1.ForeColor = Color.Red Label1.Text = "Game not found!" TextBox1.Text = Nothing Next End Sub End Class