Не работает пример поиска адреса в памяти

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Renesans
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 10.05.2006 (Ср) 19:24

Не работает пример поиска адреса в памяти

Сообщение Renesans » 10.05.2006 (Ср) 19:33

Привет.
Скачал с сайта одного пример изменеия адреса в памяти другой программы.
Решил испробовать на игре виндовской "Сапер". Неполучается.
Пишет "Couldn't get a process handle!". - Смотря на условие, это значит, что переменная pHandle равна 0.
Помогите, пожалуйста, найти ошибку.
Вот код:

Модуль:
Код: Выделить всё
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, "Сапер")
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

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 10.05.2006 (Ср) 19:50

А что такое hProcess? :?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 10.05.2006 (Ср) 20:01

Видимо Renesans не имеет привычки писать Option Explicit. А жаль... многие баги вылезали бы при компиляции.
Изображение

Renesans
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 10.05.2006 (Ср) 19:24

Сообщение Renesans » 10.05.2006 (Ср) 22:27

Да писал... И галочка аж в опциях стоит для этого:)

С Option Explicit ВБ говорит: "PROCESS_ALL_ACCESS неизвеста" или что-то в этом роде.
-------
А что надо, чтобы она известа была? Я её пробовал переменной Long объявлять - одно и тоже :(
-----------------
Статья отсюда:
http://www.cheatsmaximal.net/articles/trainer_vb.php

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 10.05.2006 (Ср) 22:42

PROCESS_ALL_ACCESS - это константа. Найти ее значение и еще пары нужных можно в Api Viewer'е. :)

Renesans
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 10.05.2006 (Ср) 19:24

Сообщение Renesans » 10.05.2006 (Ср) 23:34

Так может, мне код кто-нибудь подправит, чтобы всё работало? Новичёк я ж всёж :(

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 11.05.2006 (Чт) 2:00

А самому поправить не хочется? Начни с рассказа о том как ты пытался поправить, и как не олучилось.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 11.05.2006 (Чт) 9:50

установи себе ApiViewer сторонний или юзай встроенный в иде вб, он ставится в addins

там надыбаешь константы и прочие штуки, и будет тебе счастье :wink:
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

Renesans
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 10.05.2006 (Ср) 19:24

Сообщение Renesans » 11.05.2006 (Чт) 9:52

Я с процессами три дня как начал "общаться". Как вообще можно научиться, если есть пример, и пример неправильный.
---
Я и програмить учился - качал исходников кучу, и рассматривал их.
---
Уже 3-е мое сообщение, где я оправдываюсь. Закрывайте тему.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 93

    TopList  
cron