Ashlex » 27.04.2008 (Вс) 12:11
Нашел все-таки. может кому-то интересно будет.
Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetWindowThreadProcessId Lib “user32” (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Declare Function OpenProcess Lib “kernel32” (ByVal dwDesiredAcess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function WriteProcessMemory Lib “kernel32” (ByVal hProcess As Long, ByVal lpBaseAdress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Declare Function ReadProcessMemory Lib “kernel32” (ByVal hProcess As Long, ByVal lpBaseAddess As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWriten As Long) As Long
Declare Function CloseHandle Lib “kernel32” (ByVal hObject As Long) As Long
Private Sub Command1_Click() ' Объявляем некоторые необходимые моменты для кнопки.
Dim hwnd As Long ' удерживает управление, переданное функцией Find Window.
Dim pid As Long' используется для хранения идентификатора процесса.
Dim pHandle As Long' держит управление процессом.
' Ищем окно игры и, если игра не запущена, выдаем сообщение об ошибке.
hwnd = FindWindow(vbNullString, "Sim City 3000")
If (hwnd = 0) Then
MsgBox "Window not found!"
Exit Sub
End If
' Теперь можно определить идентификатор процесса.
GetWindowThreadProcessId hwnd, pid
' Используем этот идентификатор для получения управления процессом.
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "Couldn't get a process handle!"
Exit Sub
End If
' Теперь можно записать новое значение в память по нужному адресу.
WriteProcessMemory pHandle, &H235B218, "Beans", 5, 0&
' Прекращаем управлять процессом.
CloseHandle hProcess
End Sub
Private Sub ReadTimer_Timer()
' Объявляем некоторые необходимые моменты для таймера.
Dim hwnd As Long' удерживает управление, переданное функцией FindWindow.
Dim pid As Long ' удерживает идентификатор процесса.
Dim pHandle As Long ' удерживает управление процессом.
Dim str As String * 20 ' параметр текстовой строки.
' Вначале ищем окно игры.
hwnd = FindWindow(vbNullString, "Sim City 3000")
If (hwnd = 0) Then Exit Sub
' Теперь можно определить идентификатор процесса.
GetWindowThreadProcessId hwnd, pid
' Используем идентификатор для управления процессом.
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then Exit Sub
' Теперь можно прочитать из памяти...
ReadProcessMemory pHandle, &H235B218, str, 20, 0&
' ... и показать строку в текстовом поле трейнера.
txtDisplay = str
' Прекращаем управлять процессом.
CloseHandle hProcess
End Sub