работа с областью памяти

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

работа с областью памяти

Сообщение Gotha » 03.05.2006 (Ср) 15:12

getCount сканит область памяти на определенное значение, но все это делается в цикле и постоянно юзается ф-ция чтения значений из памяти процесса, может это можно как-то оптимизировать? подскажите, а то меня хватило только на такой вариант :cry:

Код: Выделить всё
Private Const MobHPAdress = &H54EA10

Public Declare Function Toolhelp32ReadProcessMemory Lib "kernel32.dll" (ByVal th32ProcessID As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal cbRead As Long, ByRef lpNumberOfBytesRead As Long) As Long

Function getMLong(ByVal addr As Long) As Long
Dim mp As Long
    Toolhelp32ReadProcessMemory ByVal pid, ByVal addr, mp, 4, 0
    getMLong = mp
End Function

Function getCount(ByVal myHP&) As Integer
Dim i&, Num&
    For i = HPAdress To HPAdress + 66900 Step 168
        Num = getMLong(i)
        DoEvents
        If Num <> 0 Then
           getCount = getCount + 1
        End If
    Next i
End Function
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 03.05.2006 (Ср) 15:19

а не проще сразу считать блок памяти в буфер и просматривать его на нужное значение?
Весь мир матрица, а мы в нем потоки байтов!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 03.05.2006 (Ср) 15:19

Октрывать процесс через OpenProcess т дальше юзать ReadProcessMemory, который, может так оказаться, быстрее твоей функции.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Сообщение Gotha » 03.05.2006 (Ср) 15:22

попробую оба варианта, спасибо. Только с вариантом !Viper! придется повозиться - сделать структуру чтобы читать определенные поля
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 03.05.2006 (Ср) 15:31

записывай память в массив типа Long и читай значение по нужному индексу

З.Ы. Long и имелся ввиду
Последний раз редактировалось Viper 03.05.2006 (Ср) 15:38, всего редактировалось 1 раз.
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение Gotha » 03.05.2006 (Ср) 15:35

просто у меня там тип лонг, да и степ через 168*4 байтов
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.


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

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

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

    TopList