Показано с 1 по 2 из 2
-
22.06.2016, 17:39 #1
- Регистрация
- 27.05.2015
- Сообщений
- 2
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
вопрос delphi -> ReadProcessMemory + Double - как вывести?
15:39 22.06.2016
Всем здраствуйте.
Прошу помощи.
Возник вопрос. пишу своего бота. вижу в AtrMany и CheatEngine 6.4. нужную ячейку. в CheatEngine при отсеивании и поиске указателя вижу вверху combo_box там можно выбрать тип числа -что мы хотим увидеть и при выборе:
4 byte: 2405181686
а типа double - видим то что и должны видеть ( то что в ячейке лежит )..
double: 2774,88
в делфи у меня получается считывыать ТОЛЬКО тип 4byte. ( исходник ниже )
( т.е на форме лежит лейбл куда пишется то что беру из ячейки памяти). и вижу я там число 4 byte: 2405181686
а в ячейке тестовой программы лежит ( double: 2774,88 ) - и если я его меняю, то и в CheatEngine - число тоже меняется, и если я в CheatEngine меняю тип числа на 4byte - то и вижу тоже что и на своей форме в лейбле... возник вопрос ( ищу уже давно ответ ):
как считать данные типа double.
или каким алгоритмом из числа 4byte = 2405181686
получить число типа double: 2774,88
т.е. как правильно считать из памяти число с плавающей точкой типа double.
------- ниже исходинк делфи ( 2006, winxp_sp3)
форма имеет 2 лейбла и один таймер.
вся инфа выводится в 1-й лебл.
--------------
============ begin source code ============
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var
hWin: hWnd; // для поиска хендла окна
ProcId: cardinal; // для поиска ID процесса
hProc: THandle;
AdressW: dword; // сюда прочитаем адрес из указателя
Adress: dword;
readwrite: Cardinal;
begin
hWin:=FindWindow(nil, 'Frm_1');
if hWin<>0 then
GetWindowThreadProcessId(hWin, @ProcId);
hProc:= OpenProcess(Process_All_Access, False, ProcId);
AdressW:=$46c8e0; //Адрес // правильный - показывает то что надо
label2.Caption := 'Данные в ячейке $46c8e0 сейчас равны: ';
begin
ReadProcessMemory(hProc, pointer(AdressW), @Adress, sizeof(Adress), readwrite); // читаем адрес из указателя
ReadProcessMemory(hProc, pointer(Adress+$4d0), @Adress, sizeof(Adress), readwrite);
ReadProcessMemory(hProc, pointer(Adress+$40), @Adress, sizeof(Adress), readwrite);
ReadProcessMemory(hProc, pointer(Adress+$5d0), @Adress, sizeof(Adress), readwrite);
ReadProcessMemory(hProc, pointer(Adress+$6b4), @Adress, sizeof(Adress), readwrite);
ReadProcessMemory(hProc, pointer(Adress+$2fc), @Adress, sizeof(Adress), readwrite);
end;
//label1.Caption:=intToStr(Adress) ;
label1.Caption := FloatToStr(Adress);
CloseHandle(hProc);
end;
end.
============end source code ============
т.е. данный код нормально читает , но число я вижу не в том формате - как в ячейке...
как вывести число в формате Double с точкой.?
спасибо.
-
25.06.2016, 02:57 #2
- Регистрация
- 27.05.2015
- Сообщений
- 2
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
Re: вопрос delphi -> ReadProcessMemory + Double - как вывести?
Мда...... ответ я уже нашел.
Если кому будет интересно то:
http://www.programmersforum.ru/showt...=1#post1616778
Похожие темы
-
VPN-Service/Double VPN/Best OPENVPN GUI
от In-Disguise в разделе БезопасностьОтветов: 13Последнее сообщение: 04.06.2016, 21:41 -
ищу Delphi
от Циля в разделе Прикладное программированиеОтветов: 1Последнее сообщение: 17.11.2013, 19:18 -
ReadProcessMemory и struct возвращает нулевое значение
от X-rayboy в разделе Прикладное программированиеОтветов: 0Последнее сообщение: 31.07.2012, 10:53 -
DELPHI & SQL
от kskb7771 в разделе Прикладное программированиеОтветов: 11Последнее сообщение: 29.03.2010, 15:50 -
Double-Take For ESX server
от temom в разделе СОФТ (SOFT)Ответов: 0Последнее сообщение: 24.01.2008, 16:16
Социальные закладки