Автор вопроса: Sanchez | Web-сайт:fasco.nm.ru | ICQ: 330837479
Думаю все видели, и работали с ArtMoney(для тех кто всеже незнает такой - это такая программа для поиска в памяти определенной программы, определенного значения, например можно найти значение денег в игре и поставить их на unlimited или тп.), так вот может кто знает как реализовать на VB работу с памятью определенной программы?
Как то помню делал небольшую утилитку для одной игрушки... ну вот передедаёшь внеё хендл программы.. через FindWindow я обычно его нахожу... адрес длинну того сколько читаем и куда читаем... я не призываю использовать именно эту функцию просто как пример того как можно прочитать что либо из памяти процесса
Public Function ReadClientValue(ByRef clientHandle As Long, ByRef Address As Long, ByRef lenBytes As Long, ByRef retBytes As Long) As Long
 im procId As Long, procHandle As Long
GetWindowThreadProcessId clientHandle, procId
procHandle = OpenProcess(PROCESS_ALL_ACCESS, False, procId)
ReadProcessMemory procHandle, Address, retBytes, lenBytes, 0&
CloseHandle procHandle
End Function
Как то помню делал небольшую утилитку для одной игрушки... ну вот передедаёшь внеё хендл программы.. через FindWindow я обычно его нахожу... адрес длинну того сколько читаем и куда читаем... я не призываю использовать именно эту функцию просто как пример того как можно прочитать что либо из памяти процесса
Public Function ReadClientValue(ByRef clientHandle As Long, ByRef Address As Long, ByRef lenBytes As Long, ByRef retBytes As Long) As Long
 im procId As Long, procHandle As Long
GetWindowThreadProcessId clientHandle, procId
procHandle = OpenProcess(PROCESS_ALL_ACCESS, False, procId)
ReadProcessMemory procHandle, Address, retBytes, lenBytes, 0&
CloseHandle procHandle
End Function
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Не со всеми параметрами разобрался:
hProcess - hwnd программы к которой обращаемся
lpBaseAddress - что это и откуда берется ???
lpBuffer - что это и откуда берется ???
nSize - с какого адреса берем/ложим данные
lpNumberOfBytesWritten - сколько берем/ложим
И я не понял, куда возвращается значение взятое из памяти(при чтении), и какой параметр отвечает за запись значений в память?
2 Fallout: спасибо за ответ, но я попробую свой код...
hProcess - хандл процесса, а не хандл окна
lpBaseAddress - где/куда читать/писать
lpBuffer - куда/что записываем прочитанное/пишем в память
nSize - сколько читаем/пишем
lpNumberOfBytesWritten - сколько получилось прочитать/записать
Чето нифига у меня не работает. Можешь примерчик набросать чтения/записи? Например игра сапер(у меня ВинХР), изменение количества оставшихся флажков(в игре левое число это флажки, правое - время). Адрес флажков - 01005194 , тип - целое число 8 байт
Ну в 3 часа ночи и не такой ответ напишешь а твой пример не работает(может я всетаки чтото не так делаю), вот мой проект, если есть возможность посмотри, может найдешь чего, или просто напиши готовый проект на чтение/запись и выложи, я посмотрю.