Работа с ReadProcessMemory как да четете клетъчни данни
Добър ден, скъпи, моля, кажете ми как да чета данни от клетка с памет на приложение на някой друг, претърсих много страници в Google, намерих само функцията ReadProcessMemory, но не мога да я разбера по никакъв начин.
> но не мога да се справя с това по никакъв начин
какво точно не е ясно?
procedure TForm1.Button4Click(Sender: TObject); var wBuff: byte; wHandle: цяло число; tHandle, ProcessID, pHandle, temp: cardinal; begin wHandle := FindWindow(nil, "Unnamed - Block"); ако wHandle <> 0 след това започнете tHandle := GetWindowThreadProcessId(wHandle, @ProcessID); pHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID); WriteProcessMemory(pHandle, ptr($014B6A44), @wBuff, 4, temp); // CloseHandle(pHandle); край друго ShowMessage("not handle"); край;
Доколкото разбирам, данните се въвеждат в wBuff, но не разбирам как да изтегля данни от него в нормална променлива от тип низ или цяло число.
Печатна грешка WriteProcessMemory на ReadProcessMemory
> Доколкото разбирам, данните се въвеждат в wBuff
Как 4 байта могат да се поберат в 1 байт?
> ReadProcessMemory(pHandle, ptr($014B6A44), @wBuff, 4, temp);
четири байта са подредени тук
тук се декларира един байт. Непоследователност.
> само ето как да изтеглите данни от него в обикновена променлива > въведете низ или цяло число, не разбирам
Ако Integer, тогава променливата, където четете, трябва да бъде декларирана като Integer.
например var wBuff: Integer;
благодаря, разбрах "който Google винаги ще намери" (C) :)
const Отместване = $00000000;
var Wnd: HWND; ThreadId, ProcessId, HDl: Кардинал; Прочетени байтове: Кардинал; Стойност: цяло число;
Wnd := FindWindow(nil, "Име на програмата"); Нишка > Hdl := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); ReadProcessMemory(Hdl, Pointer(Offset), @Value, 4, BytesRead);
Публикувам кода, може би ще помогне на някого.