Перейти к содержанию

Рекомендуемые сообщения

6 минут назад, Xipho сказал:

В делфи все переменные объявляются в секции var с указанием типа ) 

x: Real;

И только потом в коде идет присвоение значения

x := -669.569;

Спасибо, сейчас попробую. 

Изменено пользователем Devil9313
Ссылка на комментарий
Поделиться на другие сайты

Ребят сможете помочь ? если конечно не трудно за помощь буду благодарен 
я просто не работал со значениями типа Float не приходилось а теперь понадобилось но вот не знаю как прочитать значения и записывать их 

Изменено пользователем Devil9313
Ссылка на комментарий
Поделиться на другие сайты

Твоя процедура MemoryWriteValue принимает тип Cardinal (целое число), а ты передаешь ей значение типа Real. Отсюда и конфликт.

Поправил твой модуль.

Можешь теперь передавить процедуре MemoryWriteValue два типа данных: Cardinal, Double (тип с плавающей запятой);

P.S. Тебе лучше использовать Double, вместо Real.

MemoryHack.pas

Изменено пользователем Vlad2
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

43 минуты назад, Vlad2 сказал:

Твоя процедура MemoryWriteValue принимает тип Cardinal (целое число), а ты передаешь ей значение типа Real. Отсюда и конфликт.

Поправил твой модуль.

Можешь теперь передавить процедуре MemoryWriteValue два типа данных: Cardinal, Double (тип с плавающей запятой);

P.S. Тебе лучше использовать Double, вместо Real.

MemoryHack.pas

Огромное спасибо за помощь!!! Сейчас посмотрю что там.

Ссылка на комментарий
Поделиться на другие сайты

45 минут назад, Vlad2 сказал:

Влад не подскажешь как прочитать значение по адресу все 3 координаты мне нужно их прочитать сохранить по кнопке и переместится по другой кнопке 

Ссылка на комментарий
Поделиться на другие сайты

и перемещение по координатам срабатывает почему-то 1 раз нажал  кнопку переместился потом отошел от этого места куда переместился и нажал снова и не сработало второй раз 

Ссылка на комментарий
Поделиться на другие сайты

15 минут назад, Devil9313 сказал:

ребят кто нибудь поможет нужно прочитать значение и по нажатию на кнопку сохранять позицию и желательно выводит координаты в label

Это уже посмотрел? Не помогло?

Ссылка на комментарий
Поделиться на другие сайты

42 минуты назад, Devil9313 сказал:

Читает но почему-то не то значение указал адрес считывает но значения совсем разные 

Если ты используешь скрипт @Vlad2, то он. как мне кажется второпях, не удалил твою версию процедуры MemoryWriteValue и нужно так:

Скрытый текст

unit MemoryHack;

interface

uses
  Winapi.Windows, SysUtils, Vcl.Dialogs, Winapi.TlHelp32;

function  GetProcessID(Name: string) : Cardinal;
function  Read(Pattern: Cardinal): Cardinal;
procedure MemoryWriteValue(Address: Integer; WriteValue: Double); Overload;
procedure MemoryWriteByte(Address: Integer; WriteBytes: array of Byte);

var
 ProcessID: Cardinal;
 Protect_OFF, Protect_ON: DWORD;

 Handle: LongInt;
 P: Cardinal;
 NumRead: DWORD_PTR;
 NumWritten: DWORD_PTR;

implementation

function GetProcessID(Name: string): Cardinal;
var
 SnapShot : THandle;
 process  : TProcessEntry32;
begin
 Result := 0;
 SnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 process.dwSize := SizeOf(Process);
 Process32First(SnapShot, Process);
 repeat
  if process.szExeFile = name then
  begin
   Result := process.th32ProcessID;
   CloseHandle(SnapShot);
   exit;
  end;
 until Process32Next(SnapShot, Process) <> True;
       CloseHandle(SnapShot);
end;

function Read(Pattern: Cardinal): Cardinal;
begin
 ProcessID := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,False,ProcessID);
 if ProcessID <> 0 then
 begin
  if ReadProcessMemory(ProcessID,Ptr(Pattern),@P,SizeOf(P),NumRead) then
  Result := P;
  CloseHandle(ProcessID);
 end;
end;

procedure MemoryWriteValue(Address: Integer; WriteValue: Double); overload;
begin
 ProcessID := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,False,ProcessID);
 if ProcessID <> 0 then
 begin
  VirtualProtectEx(ProcessID,Ptr(Address),SizeOf(WriteValue),PAGE_EXECUTE_READWRITE,Protect_ON);
  WriteProcessMemory(ProcessID,Ptr(Address),@WriteValue,SizeOf(WriteValue),NumWritten);
  VirtualProtectEx(ProcessID,Ptr(Address),SizeOf(WriteValue),Protect_OFF,Protect_ON);
  CloseHandle(ProcessID);
 end;
end;

procedure MemoryWriteByte(Address: Integer; WriteBytes: array of Byte);
begin
 ProcessID := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,False,ProcessID);
 if ProcessID <> 0 then
 begin
  VirtualProtectEx(ProcessID,Ptr(Address),SizeOf(WriteBytes),PAGE_EXECUTE_READWRITE,Protect_ON);
  WriteProcessMemory(ProcessID,Ptr(Address),@WriteBytes,SizeOf(WriteBytes),NumWritten);
  VirtualProtectEx(ProcessID,Ptr(Address),SizeOf(WriteBytes),Protect_OFF,Protect_ON);
  CloseHandle(ProcessID);
 end;
end;

end.

 

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.