Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAcess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private 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
Private 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
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF
Const PROC = &HD5976EC
Dim V As Long
Private Sub Command1_Click() ' Объявляем некоторые необходимые моменты для кнопки
Dim hwnd As Long ' удерживает управление, переданное функцией Find Window
Dim pid As Long ' используется для хранения идентификатора процесса
Dim pHandle As Long ' держит управление процессом
' Ищем окно игры и, если игра не запущена, выдаем сообщение об ошибке
hwnd = FindWindow(vbNullString, "SimCity 4")
If hwnd = 0 Then
MsgBox "Process 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, PROC, "100", Len("100"), 0&
CloseHandle hProcess
End Sub
Private Sub Form_Load()
V = 100
End Sub
Private Sub Timer1_Timer()
' Объявляем некоторые необходимые моменты для таймера
Dim hwnd As Long ' удерживает управление, переданное функцией FindWindow
Dim pid As Long ' удерживает идентификатор процесса
Dim pHandle As Long ' удерживает управление процессом
Dim str As String * 20 ' параметр текстовой строки
' Вначале ищем окно игры
hwnd = FindWindow(vbNullString, "SimCity 4")
If (hwnd = 0) Then Exit Sub
' Теперь можно определить идентификатор процесса
GetWindowThreadProcessId hwnd, pid
' Используем идентификатор для управления процессом
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then Exit Sub
' Теперь можно прочитать из памяти...
ReadProcessMemory pHandle, PROC, str, 20, 0&
' ... и показать строку в текстовом поле трейнера
Text1 = Asc(str)
' Прекращаем управлять процессом
CloseHandle hProcess
End Sub
13GHOST писал(а):"ReadProcessMemory pHandle, PROC, str, 20, 0&" - указывает на переменную PROC и говорит Type Mismatch. Почему?
BOOL ReadProcessMemory(
HANDLE hProcess, // handle to the process
LPCVOID lpBaseAddress, // base of memory area
LPVOID lpBuffer, // data buffer
SIZE_T nSize, // number of bytes to read
SIZE_T * lpNumberOfBytesRead // number of bytes read
);
MSDN писал(а):If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
The function fails if the requested read operation crosses into an area of the process that is inaccessible.
Zer писал(а):А Asm вообще Forever. Если кто пишет, попробуйте записать чего-нибудь по адресу B800:0000(es:di).
Ennor писал(а):константы в VB лучше все-таки объявлять типизированными: Public const PROC as Long = &H44C
13GHOST писал(а):...
Мне гланое надо узнать по какому принцыпу осуществляется низкоуровневый доступ к памяти...
Ennor писал(а):13GHOST писал(а):...
Мне гланое надо узнать по какому принцыпу осуществляется низкоуровневый доступ к памяти...
...Только не из VB, а из Win32API, ибо в басике встроенных средств для такого изврата нет.
Сейчас этот форум просматривают: AhrefsBot, Google-бот, Majestic-12 [Bot] и гости: 168