Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2013, 18:36   #1
RibGeDx
Пользователь
 
Аватар для RibGeDx
 
Регистрация: 10.05.2012
Сообщений: 16
По умолчанию ReadProcessMemory & Extended type

Всем привет. Короче, пытаюсь читать с процесса нужное значение по определённому адресу. Адрес нашел правильный (при перезапуске он не меняется). Ну собсна, создаю процесс (CreateProcess) и сразу пытаюсь с него читать нужное значение. Но в чем прикол, когда процесс завершается или еще не запустился, то при чтении выбивает ошибку Invalid float operation... Точнее не при чтении, а при попытке записать прочитанные данные куда то... Может можно как нибудь проверить, есть ли определённый адрес в программе или можно сделать как то по другому?

Код:
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: PAnsiChar;

function Exec(FileName, Parameters: PAnsiChar; Show: Boolean): Boolean;
begin
  CmdLine := PAnsiChar('"' + FileName + '" ' + Parameters);
  FillChar(StartInfo, SizeOf(StartInfo), #0);

  with StartInfo do begin
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := SW_Show;
  end;

  try
    Result:= CreateProcessA(nil, CmdLine, nil, nil, false,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
    PAnsiChar(ExtractFilePath(FileName)), StartInfo, ProcInfo);
  except
    Exit;
  end;

  if Result then begin
    while WaitForSingleObject(ProcInfo.hProcess, 10) <> WAIT_OBJECT_0 do begin
      Application.ProcessMessages;
    end;
  
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;

procedure ReadFromProcess;
var pr: Extended; readed: Cardinal;
begin
  if ReadProcessMemory(ProcInfo.hProcess, Ptr($0028F8B4), addr(pr), 10, readed) then begin
      Form1.Label1.Caption:= 'get adr: ' + floattostr(pr);
  end;
end;
чтение с процесса идет по таймеру )
RibGeDx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ReadProcessMemory и WriteProcessMemory Berlioz Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 12.11.2012 17:42
Could not convert variant of the type (String) into type (Boolean) Silly Student C++ Builder 0 19.11.2011 13:06
Отличие type T = Object от type T = Class? Warn Общие вопросы Delphi 8 04.11.2011 19:20
Could not convert variant of type (Olestr) into type (Double) java_91 Общие вопросы Delphi 1 18.02.2011 18:46
Could not convert variant of type (UnicodeString) into type (Double) postaveche БД в Delphi 11 13.12.2010 16:41