[Статья] Пишем простой Auto-Potter для Perfect World [Delphi 7] - Zhyk.Ru Forums
Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.Ru LIVE! Реклама на Zhyk.Ru Доска почета top.zhyk.ru (beta) Премиум-аккаунт

Пишем простой Auto-Potter для Perfect World [Delphi 7]

-

Разработка ПО для Perfect World

- Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World

Ответ
 
Опции темы Опции просмотра
Старый 28.12.2011, 13:21   #1
 Пехотинец
Аватар для Хакерок:)
 
Хакерок:) на правильном путиХакерок:) на правильном пути
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
Отправить сообщение для Хакерок:) с помощью ICQ
 
Post Пишем простой Auto-Potter для Perfect World [Delphi 7]

Пишем простой Auto-Potter для Perfect World

Доброго времени суток! Решил написать эту статью, т.к. наткнулся на эту тему и меня попросили. В этой статье я расскажу о том, как создать самый простой Auto-Potter для Perfect World. Итак, приступим.

Для начала опишем функции, которые мы будем использовать:
  • FindWindow(ClassName, WindowName: PChar): HWnd;
    ClassName - Имя класса окна (заканчивающееся пустым символом, nil - если все классы).
    WindowName - Текстовый заголовок окна или 0, если все окна.
    С помощью этой функции мы будем мы будем искать Handle окна клиента.

  • GetWindowThreadProcessId(hWnd: HWND; lpdwProcessId: Pointer = nil): DWORD; stdcall; overload;
    hWnd - Дескриптор окна.
    lpdwProcessId - Указатель на переменную типа DWord, после использования функции в него скопируется идентификатор потока создавшего окно.

  • OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; stdcall;
    dwDesiredAccess - Устанавливает права доступа к объекту (мы будем получать полные права доступа PROCESS_ALL_ACCESS)/
    bInheritHandle - Параметр дескриптора наследования.
    dwProcessId - идентификатор потока.
    С помощью этой функции мы получим права доступа к памяти объекта.

  • ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
    hProcess - Идентификатор объекта
    lpBaseAddress - Указатель на адрес из которого будем читать
    lpBuffer - Указатель на переменную-буфер, в которую будем читать значение из памяти.
    nSize - Количество байт, которое мы хотим прочитать. lpNumberOfBytesRead - Переменная-буфер, в которой устанавливается значение соответствующее количеству прочитанных байт.
    С помощью этой функции мы будем "подбираться" к нужному нам адресу.

  • SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
    Wnd - Окно, пpинимающее сообщение.
    Msg - Тип сообщения. (В нашем случае WM_KEYDOWM и WM_KEYUP - нажатие клавиши).
    wParam - Дополнительная инфоpмация о сообщении. (В нашем случае код виртуальной клавиши).
    lParam - Дополнительная инфоpмация о сообщении. (В нашем случае 0).
    С помощью этой функции мы будем посылать нажатие клавиши в окно клиента.
Прежде чем перейти к кодингу мы определим, как будет действовать наш Auto-Potter. В данном случае, дабы не нагромождать статью, мы воспользуемся самым простым путём:
Таймер будет обновлять показатели HP и MP на двух Gauge, и, если их процентное значение меньше требуемого, то происходит отправка нажатия клавиши в окно клиента.

Переходим к кодингу:
Создаем новый проект Delphi 7. На форму кидаем такие компоненты:
  • Timer (Вкладка System)
  • Gauge (Вкладка Samples) - 2 шт.
  • Edit (Вкладка Standart) - 2 шт.
  • Button (Вкладка Standart) - 2 шт.
Разместите компоненты примерно так:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Теперь поясню, для чего нужен каждый из них:
  • Timer - основа нашей программы. Служит для обновления значений ХП и МП. (Свойство Enabled := False; Interval := 10);
  • Кнопки Вкл и Выкл служат для включения и выключения Auto-Pottera. (Спасибо Кеп )
  • Два Gauge - мониторинг ХП и МП.
  • Два Edit'a - значение ХП(1) и МП(2), при котором посылаем нажатие клавиши.
Перед кодингом мы должны знать оффсеты. На момент написания статьи это:
HP: [[[$B280C4]+$34]+$490]
MaxHP: [[[$B280C4]+$34]+$4D0]
MP: [[[$B280C4]+$34]+$494]
MaxMP: [[[$B280C4]+$34]+$4D4]
Теперь переключаемся в редактор кода и пишем всё по порядку:
  • Объявим несколько глобальных переменных для удобства:
    Код:
      KlientWindow:HWND; //Handle клиента
      ProcessId:Integer;
      hProcess:Integer; //Идентификатор объекта
      HPMinValue:Integer; //Минимальное значение ХП (из Edit1) 
      MPMinValue:Integer; //Минимальное значение МП (из Edit2)
  • Для начала создаем обработчик события кнопки Вкл - OnClick:
    Код:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    KlientWindow := FindWindow(nil, PChar('Perfect World')); //Находим Handle окна
    GetWindowThreadProcessId(KlientWindow,@ProcessId); //Получаем Ид.П.
    hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); //Открываем процесс с полным доступом
    HPMinValue := StrToInt(Edit1.Text);
    MPMinValue := StrToInt(Edit2.Text);
    Timer1.Enabled := True;
    end;
  • Теперь переходим к нашему Timer - создаем обработчик события OnTimer:
    Код:
    procedure TForm1.Timer1Timer(Sender: TObject);
    var HP,HPMax,MP,MPMax:Integer;
        WHP,WHPMax,WMP,WMPMax,NoB:DWord;
    begin
      try //На всякий случай заключаем в try...except, дабы в случай релога не засыпать пользователя ошибками
        ReadProcessMemory (hProcess, Pointer($B280C4), @WHP, sizeof(WHP), NoB);
        ReadProcessMemory (hProcess, Pointer(WHP+$34), @WHP, sizeof(WHP), NoB);
        ReadProcessMemory (hProcess, Pointer(WHP+$490), @WHP, sizeof(WHP), NoB); //Читаем значение HP
        HP := Integer(WHP); //Переводим Integer
        ReadProcessMemory (hProcess, Pointer($B280C4), @WHPMax, sizeof(WHPMax), NoB);
        ReadProcessMemory (hProcess, Pointer(WHPMax+$34), @WHPMax, sizeof(WHPMax), NoB);
        ReadProcessMemory (hProcess, Pointer(WHPMax+$4D0), @WHPMax, sizeof(WHPMax), NoB); //Читаем значение MaxHP
        HPMax := Integer(WHPMax); //Переводим Integer
        ReadProcessMemory (hProcess, Pointer($B280C4), @WMP, sizeof(WMP), NoB);
        ReadProcessMemory (hProcess, Pointer(WMP+$34), @WMP, sizeof(WMP), NoB);
        ReadProcessMemory (hProcess, Pointer(WMP+$494), @WMP, sizeof(WMP), NoB); //Читаем значение MP
        MP := Integer(WMP); //Переводим Integer
        ReadProcessMemory (hProcess, Pointer($B280C4), @WMPMax, sizeof(WMPMax), NoB);
        ReadProcessMemory (hProcess, Pointer(WMPMax+$34), @WMPMax, sizeof(WMPMax), NoB);
        ReadProcessMemory (hProcess, Pointer(WMPMax+$4D4), @WMPMax, sizeof(WMPMax), NoB); //Читаем значение MaxMP
        MPMax := Integer(WMPMax); //Переводим Integer
        Gauge1.Progress := round(HP * 100 / HPMax);  //Присваиваем процентное значение HP Gauge1.Progress
        Gauge2.Progress := round(MP * 100 / MPMax);  //Присваиваем процентное значение MP Gauge2.Progress
      except
      end;
      if Gauge1.Progress < HPMinValue then //Если HP меньше минимального
          begin
            SendMessage(KlientWindow, WM_KEYDOWN, VK_F1, 0); //то нажимаем
            SendMessage(KlientWindow, WM_KEYUP, VK_F1, 0); //клавишу F1
          end;
      if Gauge2.Progress < MPMinValue then //Если MP меньше минимального
          begin
            SendMessage(KlientWindow, WM_KEYDOWN, VK_F2, 0); //то нажимаем
            SendMessage(KlientWindow, WM_KEYUP, VK_F2, 0); //клавишу F2
          end;
    end;
  • И завершаем это всё обработчиком события кнопки Выкл - OnClick:
    Код:
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Timer1.Enabled := False;
    end;

Ну вот и всё, простейший Auto-Potter готов. Исходник в аттаче. Спасибо за внимание!
Копирование статьи разрешено только с обязательной ссылкой на источник!
Вложения
Тип файла: zip Auto-Potter.zip (9.5 Кб, 516 просмотров)

Последний раз редактировалось Хакерок:); 28.12.2011 в 13:25.
  Ответить с цитированием
12 пользователя(ей) сказали cпасибо:
=PaLeTiZaToR= (07.01.2012), dart994 (10.07.2012), DevZI (24.11.2013), FarmHitman1 (27.03.2012), fullzero (03.01.2015), JeckAtlas (08.02.2015), ktulx (31.12.2011), nemca (28.12.2011), Prom4eg (30.12.2011), reca (28.12.2011), sedrik1992 (21.09.2013), ~ГайвеР~ (28.12.2011)
Старый 28.12.2011, 14:58   #2
-= Элитный Мастер =-
 Главнокомандующий
Аватар для Kitsune
 
Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(
Регистрация: 20.01.2010
Сообщений: 1,541
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,716 раз(а) в 538 сообщениях
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

С возвращением!
  Ответить с цитированием
Пользователь сказал cпасибо:
Хакерок:) (28.12.2011)
Старый 28.12.2011, 22:34   #3
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Годно. Будет полезно для самых зелёненьких )
Только с цветом текста немного переборщил.
  Ответить с цитированием
Старый 28.12.2011, 23:09   #4
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 729
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Цитата:
Сообщение от BritishColonistПосмотреть сообщение
Только с цветом текста немного переборщил.

С каким цветом текста? Что переборщил? Что-то я не въехал...
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 28.12.2011, 23:25   #5
 Пехотинец
Аватар для Хакерок:)
 
Хакерок:) на правильном путиХакерок:) на правильном пути
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
Отправить сообщение для Хакерок:) с помощью ICQ
 
Post Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Цитата:
Сообщение от VeTaL_UAПосмотреть сообщение
С каким цветом текста? Что переборщил? Что-то я не въехал...

Это он имеет ввиду перебор с оранжевым цветом текста.
  Ответить с цитированием
Старый 29.12.2011, 16:56   #6
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 729
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Цитата:
Сообщение от Хакерок:)Посмотреть сообщение
Это он имеет ввиду перебор с оранжевым цветом текста.

Ну, по моему, тут нет никакого перебора. Вся статья написана приятными для глаза цветами шрифта...
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 29.12.2011, 17:59   #7
 Старший сержант
Аватар для Skuka.95
 
Skuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражания
Регистрация: 12.06.2010
Сообщений: 186
Популярность: 1746
Сказал(а) спасибо: 27
Поблагодарили 64 раз(а) в 59 сообщениях
Отправить сообщение для Skuka.95 с помощью ICQ
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Цитата:
Сообщение от Хакерок:)Посмотреть сообщение
Это он имеет ввиду перебор с оранжевым цветом текста.

да норм у ветали все статьи в оранжевом)
Цитата:
Сообщение от VeTaL_UAПосмотреть сообщение
Ну, по моему, тут нет никакого перебора. Вся статья написана приятными для глаза цветами шрифта...

что я и говарил)) теперь сам перенял писать статьи оранжевым цветом (на своём сайте)

P.s. Статья хорошо расписанна, для новичков сойдёт) мне к примеру помогло)
________________
Почти забросил раздел Pw скажем спасибо TBX1n и серверу
Цитата:
Сообщение от TBX1n
Скука новый админ

  Ответить с цитированием
Старый 29.12.2011, 19:10   #8
 Пехотинец
Аватар для Хакерок:)
 
Хакерок:) на правильном путиХакерок:) на правильном пути
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
Отправить сообщение для Хакерок:) с помощью ICQ
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Цитата:
Сообщение от Skuka.95Посмотреть сообщение
да норм у ветали все статьи в оранжевом)

что я и говарил)) теперь сам перенял писать статьи оранжевым цветом (на своём сайте)

P.s. Статья хорошо расписанна, для новичков сойдёт) мне к примеру помогло)

Выделять всё оранжевым цветом - это привычка) Под старый дизайн Жука вписывается как родной, да и сейчас не выбивается)
  Ответить с цитированием
Старый 02.01.2012, 14:13   #9
 Разведчик
Аватар для Fahbrf
 
Fahbrf никому не известный тип
Регистрация: 18.06.2011
Сообщений: 4
Популярность: 18
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Цитата:
Сообщение от Хакерок:)Посмотреть сообщение
HP: [[[$B280C4]+$34]+$490]

Прошу прощения за нубство, я понимаю что значит например $490, но вот что значит $34 и $B280C4 не понимаю))) Догадываюсь, что $B280C4 это Base Address, ну а про $34 вообще ничего)))
________________
Задание:⊗ Репутация 10.
Ο Репутация 50.
Ο Репутация 150.
  Ответить с цитированием
Старый 02.01.2012, 14:22   #10
 Старший сержант
Аватар для Skuka.95
 
Skuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражанияSkuka.95 блестящий пример для подражания
Регистрация: 12.06.2010
Сообщений: 186
Популярность: 1746
Сказал(а) спасибо: 27
Поблагодарили 64 раз(а) в 59 сообщениях
Отправить сообщение для Skuka.95 с помощью ICQ
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Цитата:
Сообщение от FahbrfПосмотреть сообщение
$B280C4

это не ба, это GA
Цитата:
Сообщение от FahbrfПосмотреть сообщение
а про $34 вообще ничего)))

это структура персонажа
________________
Почти забросил раздел Pw скажем спасибо TBX1n и серверу
Цитата:
Сообщение от TBX1n
Скука новый админ

  Ответить с цитированием
Старый 03.01.2012, 15:19   #11
 Пехотинец
Аватар для Хакерок:)
 
Хакерок:) на правильном путиХакерок:) на правильном пути
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
Отправить сообщение для Хакерок:) с помощью ICQ
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Цитата:
Сообщение от FahbrfПосмотреть сообщение
Прошу прощения за нубство, я понимаю что значит например $490, но вот что значит $34 и $B280C4 не понимаю))) Догадываюсь, что $B280C4 это Base Address, ну а про $34 вообще ничего)))

Skuka.95 тебе уже ответил, но если хочешь узнать подробнее, то тут тема TBX1n. Оффсеты там старые, но проще понять всё, что касается их.
BA - BaseAddress - Базовый адрес
GA - GameRun - начало игровой структуры
GA = [BA] + $1C
Структура игрока: [GA] +$34
Ну и следовательно значение ХП: [[[GA] + $34] + $490]
  Ответить с цитированием
Пользователь сказал cпасибо:
fullzero (05.11.2013)
Старый 10.01.2012, 17:37   #12
 Разведчик
Аватар для BeniRey
 
BeniRey никому не известный тип
Регистрация: 22.10.2011
Сообщений: 26
Популярность: 12
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для BeniRey с помощью ICQ
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Статья действительно хорошая, все четко и понятно расписано, очень помогло!!
Хакерок
Подскажи пожалуйста как можно к:
Цитата:
Сообщение от Хакерок:)Посмотреть сообщение
procedure TForm1.Button1Click(Sender: TObject); begin KlientWindow := FindWindow(nil, PChar('Perfect World')); //Находим Handle окна GetWindowThreadProcessId(KlientWindow,@ProcessId); //Получаем Ид.П. hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); //Открываем процесс с полным доступом HPMinValue := StrToInt(Edit1.Text); MPMinValue := StrToInt(Edit2.Text); Timer1.Enabled := True; end;

подключить выбор персоонажа в "ComboBox'-е" и соответственно переименовывание окна.
  Ответить с цитированием
Старый 10.01.2012, 20:42   #13
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 729
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

BeniRey, я помогу
Глобальные переменные:
Код:
var
  FID: array[0..10] of THandle;
  Nm: string;
Вспомогательные функции:
ReadPlayerName
WritePlayerName
Загрузка всех запущенных окон в ComboBox:
Код
Переименование персонажа в выбранном в ComboBox'е окне:
Код

Если нужны объяснения, то я готов объяснить всё в этой теме...
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Пользователь сказал cпасибо:
BeniRey (11.01.2012)
Старый 11.01.2012, 21:05   #14
 Разведчик
Аватар для BeniRey
 
BeniRey никому не известный тип
Регистрация: 22.10.2011
Сообщений: 26
Популярность: 12
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для BeniRey с помощью ICQ
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Большое спасибо!!!

Вот здесь видимо какая то ошибка:

Цитата:
Сообщение от VeTaL_UAПосмотреть сообщение
procedure TForm1.Button1Click(Sender: TObject);
var
Wnd:THandle;
buf,ibuf,BC: DWord;
hProcess,PID: DWord;
const BA=$00B27A04;
begin
Wnd:=FID[ComboBox1.ItemIndex];
GetWindowThreadProcessId(Wnd,@PID);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,PID );
ReadProcessMemory(hProcess,ptr(BA),@ibuf,sizeof(ib uf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$1C),@ibuf,siz eof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$34),@ibuf,siz eof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$638),@buf,siz eof(buf),BC);
Nm:=Edit1.Text;
WritePlayerName(hProcess,buf);
CloseHandle(hProcess);
end;

Потому что при нажати на кнопку происходит изменение имени в Юзербаре игрока, без изменения имени окна. В остальном все хорошо работает!! Самое главное что есть примерная структура построения программы!
  Ответить с цитированием
Старый 11.01.2012, 21:17   #15
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 729
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]

Цитата:
Сообщение от BeniReyПосмотреть сообщение
Потому что при нажати на кнопку происходит изменение имени в Юзербаре игрока, без изменения имени окна.

Этот код и изменяет имя игрока в юзербаре
Переименования окна:
Код:
procedure TForm1.Button1Click(Sender: TObject); 
var
Wnd:THandle; 
begin 
Wnd:=FID[ComboBox1.ItemIndex]; 
SetWindowText(Wnd,PChar(Edit1.Text));
end;
Добавлено через 5 минут
Переименования выбранного окна по имени персонажа:
Код:
procedure TForm1.Button1Click(Sender: TObject); 
var
Wnd:THandle; 
buf,ibuf,BC: DWord; 
hProcess,PID: DWord; 
const BA=$00B27A04; 
begin 
Wnd:=FID[ComboBox1.ItemIndex]; 
GetWindowThreadProcessId(Wnd,@PID);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,PID );
ReadProcessMemory(hProcess,ptr(BA),@ibuf,sizeof(ib uf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$1C),@ibuf,siz eof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$34),@ibuf,siz eof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$638),@buf,siz eof(buf),BC);
SetWindowText(Wnd,PChar(ReadPlayerName(hProcess,buf)));
CloseHandle(hProcess); 
end;
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.



Последний раз редактировалось VeTaL_UA; 11.01.2012 в 21:22. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обсуждение Auto Perfect World Fedos1977 Общение и обсуждение Perfect World 95 11.12.2011 18:00
[Программа] Auto Perfect World semoder Боты, скрипты и прочий софт для Perfect World 1 22.11.2010 10:50
[Программа] Perfect World Auto-login v.1.1. KloneB@DGuY Боты, скрипты и прочий софт для Perfect World 5 25.04.2010 15:50

www.webmoney.ru
Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 12:26.

Пишите нам: forum@zhyk.ru
Copyright © 2019 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net