|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
вопрос 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-й лебл. Код:
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. т.е. данный код нормально читает , но число я вижу не в том формате - как в ячейке... как вывести число в формате Double с точкой.? спасибо. Последний раз редактировалось Admin, 22.06.2016 в 19:22. |
#2
|
|||
|
|||
Всем спасибо. Решение найдено. Если кому интереснл решение тут:
http://www.programmersforum.ru/showt...31#post1615931 Всем спасибо и удачи. |