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






