Робота з ReadProcessMemory, як прочитати дані осередку
Доброго дня шановні, підкажіть, будь ласка, як рахувати дані з осередку пам'яті чужого додатка, перегугнув безліч сторінок, знайшов лише функцію ReadProcessMemory, але розібратися ніяк з нею не можу.
> але розібратися ніяк із нею не можу
що саме не зрозуміло ?
procedure TForm1.Button4Click(Sender: TObject); var wBuff: byte; wHandle: integer; tHandle, ProcessID, pHandle, temp: cardinal; begin wHandle := FindWindow(nil, "Áåçûìÿíííéé - Áëîêíîò"); if wHandle <> 0 then begin tHandle := GetWindowThreadProcessId(wHandle, @ProcessID); pHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID); WriteProcessMemory(pHandle, ptr($014B6A44), @wBuff, 4, temp); // CloseHandle(pHandle); end else ShowMessage("not handle"); end;
З того що я зрозумів, дані заносяться в wBuff, тільки як витягнути з неї дані в звичайну змінну типу string або integer, не розумію.
Помилка WriteProcessMemory на ReadProcessMemory
> З того що я зрозумів, дані заносяться до wBuff
Як же 4 байти можуть поміститися в 1 байт?
> ReadProcessMemory(pHandle, ptr($014B6A44), @wBuff, 4, temp);
тут замовлено читання чотирьох байт
тут оголошено один байт. Нестиковка.
> тільки ось як витягнути з неї дані у звичайну змінну > типу string або integer, не розумію
Якщо Integer, то змінну, куди читаєш, потрібно оголосити як Integer.
наприклад, var wBuff: Integer;
дякую розібрався "хто гугліт той завжди знайде" (С) :)
const Offset = $00000000;
var Wnd: HWND; ThreadId, ProcessId, Hdl: Cardinal; BytesRead: Cardinal; Value: Integer;
Wnd: = FindWindow(nil, "Ім'я програми"); Thread > Hdl: = OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); ReadProcessMemory(Hdl, Pointer(Offset), @Value, 4, BytesRead);
Викладаю код, може кому нагоді.