Показать сообщение отдельно
  #1  
Старый 21.07.2012, 02:15
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию изменить значение в памяти другого процесса

Вобщем надо изменить значение в другой прогамме.
Адрес памяти всегда постоянный, (отсеял его с помощью ArtMoney)
адрес 00871714
нашел в интернете как считывать изменять данные в программе,но уменя не работает =(
вот листинг программы,посмотрите что не так
Код:
uses ...TlHelp32;

//функция поиска хендла по имени exe файла прогаммы
function GetProcessByEXE(exename:string):thandle;
var
  I: Integer;
  hSnapshoot: THandle;
  pe32: TProcessEntry32;

  proc:thandle;
begin
  result:=0;
  hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  if (hSnapshoot = -1) then
      Exit;
  pe32.dwSize := SizeOf(TProcessEntry32);
  if (Process32First(hSnapshoot, pe32)) then
  repeat
  if (pe32.szExeFile=exename)then
     begin
     result:=pe32.th32ProcessID;
     exit;
     end;
  until not Process32Next(hSnapshoot, pe32);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  GameScreen: HWND; //хендл процесса
  Buffer: Byte; //тут будет наше значение
  ProcessIdentifier, ProcessHandle, Temp: Cardinal;
  NumberOfBytes: byte;// количество байт

begin
NumberOfBytes:=8;
  GameScreen := GetProcessByEXE('proga.exe');
  if GameScreen <> 0 then
  begin
    GetWindowThreadProcessId(GameScreen, @ProcessIdentifier);
    ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessIdentifier);
    ReadProcessMemory(ProcessHandle, Ptr($00871714), @Buffer,NumberOfBytes, Temp);    
    ShowMessage( IntToStr(Buffer) );
    //Buffer:=5; //пока не надо
    //WriteProcessMemory(ProcessHandle,Ptr($00871714),@Buffer,NumberOfBytes,Temp);
    Closehandle(ProcessHandle);

  end;
end;
при считывании всё время возвращается ноль. хотя там не ноль.
еще,где NumberOfBytes:=8; это АртМоней показывает Тип-целое, 8байт. вроде правильно подставил?
Хенд процесса возвращается правильный, сверял с АртМонием.
Где косяк?
еще я слышал что дельфи шестнадцатеричные числа както в обратном порядке читает.может адрес памяти переконвертировать както надо?
Ответить с цитированием