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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2013, 22:05   #1
rainzek
Новичок
Джуниор
 
Регистрация: 24.07.2013
Сообщений: 1
Печаль Текст в Адресе (String and Cardinal)

Хотел создать свой трейнер-русификатор для игры но есть одна проблема, я не мастер на Delphi и мало знаю языков программирования. Пожалуйся, помогите.
Вопрос: Как сделать так чтоб в указанных байтах значение менялось не на число а на текст! Я много пытался но так и не получилось, вылазила ошибка что Кардинал и Стринг используется одновременно и что-то в этом роде.

Вот сам код:



var
Form1: TForm1;
WindowName: integer;// Для удобства объявим как глобальные переменные.
ProcessId: integer; // Все эти переменные нужны для того, чтобы найти
ThreadId: integer; // процесс с игрой.
HandleWindow: Integer; //
write: cardinal; // В эту переменную попадёт количество записанных байтов. (И как тут быть?)
buf: dword; // Тут будет содержаться значение, на которое будем изменять. (Что это я не понял)
const
WindowTitle = 'Наша игра'; // Заголовок окна с игрой

Address = $83C4BF64; // Адрес, по которому будем изменять значение на текстовое.
NumberOfBytes = 4; // Количество байт, которые будем заменять. Что тут писать? Вроде надо оставить 4, потому что 4 байтовый адрес

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
WindowName := FindWindow(nil,WindowTitle);
If WindowName = 0 then begin // Если окошка у нас нет, то и изменять нечего.
MessageDlg('Игра должна быть запущена до трейнера. Запустите ее, потом трейнер', mtwarning,[mbOK],0);
end;
ThreadId := GetWindowThreadProcessId(WindowName ,@ProcessId); // Ищем хэндл процесса
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,Fals e,ProcessId); // с нашей игрой.
buf:=$DEAD; // DEADh = 57005d
WriteProcessMemory(HandleWindow, ptr(address), @buf, 4, write); // Изменяем значение по этому адресу на наше.
end;





Пожалуйста, помогите.
Подробности: нужно сделать так чтоб в байтах было не числовое Value ставилось а ТЕКСТОВОЕ - string, у меня не получается. Заранее спасибо.
Например: я нашел через ArtMoney текстовое значение 'Hello' и я копирую байты и вставляю в наш код и мне надо чтоб ставилось не число а перевод вместо 'Hello' при нажатий на кнопку трейнер переиминовывал его в 'Привет'

Последний раз редактировалось rainzek; 24.07.2013 в 22:08.
rainzek вне форума Ответить с цитированием
Старый 24.07.2013, 22:11   #2
Стертор
Заблокирован
 
Регистрация: 24.07.2013
Сообщений: 41
По умолчанию

Цитата:
WriteProcessMemory(HandleWindow, ptr(address), @buf, 4, write);
Смотрите, как бы ваша игра "в доктора" не закончилась промыванием желудка.
Стертор вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текст слишком длинный не помещается в System::String askerpro Visual C++ 1 09.05.2012 12:55
Текст string Deli Помощь студентам 0 06.12.2011 16:44
Загрузить текст из file.txt в объект String apromix JavaScript, Ajax 3 10.10.2011 09:06
Добавляем форматированный текст в RichEdit из String Jetro Общие вопросы Delphi 10 24.06.2011 15:40
текст String death65 Помощь студентам 4 25.11.2010 19:15