Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];

Вниз

Как узнать значения в чужих приложениях?   Найти похожие ветки 

 
Danco ©   (2010-01-29 02:39) [0]

Доброго времени суток мастера :)

Подскажите как узнать значения в чужом приложении, точнее 3D игре, а если еще точнее, то в PerfectWorld?

Если, кто юзал игру, то поймет о чем идет речь. В общем нужны координаты персонажа x и y. Гуглил и нашел только подобный код, но не на делфи а на Autoit:


#include <NomadMemory.au3>
$PID = ProcessExists("elementclient.exe")
$Handle = _MemoryOpen($PID)
$x = _MemoryRead(0x009771BC,$Handle)
$x = _MemoryRead($x+0x20,$Handle)
$x= _MemoryRead($x+0x3C,$Handle)
MsgBox(0,"Test X","your x: " & $x &"." )


Полностью в этом вопросе признаюсь нуб, но может мне кто-нибудь подскажет, как это реализовать на Delphi?
Или дать ссылки на изучения матерьяла :)


 
Leonid Troyanovsky ©   (2010-01-29 09:32) [1]


> Danco ©   (29.01.10 02:39)  

> Или дать ссылки на изучения матерьяла :)

http://msdn.microsoft.com/en-us/library/ms679303(VS.85).aspx
ReadProcessMemory function.

--
Regards, LVT.


 
Danco ©   (2010-01-29 22:47) [2]

Спасибо Leonid Troyanovsky

Немного понял, но совсем немного :)


function MainReadByteIZFile(MainAddress, IDAgent:Cardinal):String;
var HandleWindow : cardinal;
   ipBase: Pointer;
   IpBuf : longint;
   numberRead: DWORD;
begin
HandleWindow:=OpenProcess(PROCESS_VM_READ,False,IDAgent);
ipBase:=ptr($009771BC);
ReadProcessMemory(HandleWindow, ipBase, Addr(ipbuf), 4, numberRead);
CloseHandle(HandleWindow);
end;


Нашел подобную функцию, но что-то не понимаю как ей пользоваться.
MainReadByteIZFile(?,?);
Что именно сюда вписывать? Что такое MainAddress и IDAgent? :/


 
Danco ©   (2010-01-29 23:07) [3]

Немного еще доперло до моих мозгов )

ID процесса можно найти таким методом:


function FindProcess(name: string): Cardinal;
var
 hSnapshot: THandle;
 lppe: TProcessEntry32;
begin
 Result := 0;
 hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 if hSnapshot = 0 then
   exit;
 lppe.dwSize := SizeOf(TProcessEntry32);
 if Process32First(hSnapshot,lppe) then
   repeat
     if name = ExtractFileName(lppe.szExeFile) then
     begin
       Result := lppe.th32ProcessID;
       break;
     end;
   until not Process32Next(hSnapshot,lppe);
 CloseHandle(hSnapshot);
end;


Но поэксперементировал на своем проекте и выводит пустую строку (память $021D44CC беру через артмани)


function FindProcess(name: string): Cardinal;
var
 hSnapshot: THandle;
 lppe: TProcessEntry32;
begin
 Result := 0;
 hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 if hSnapshot = 0 then
   exit;
 lppe.dwSize := SizeOf(TProcessEntry32);
 if Process32First(hSnapshot,lppe) then
   repeat
     if name = ExtractFileName(lppe.szExeFile) then
     begin
       Result := lppe.th32ProcessID;
       break;
     end;
   until not Process32Next(hSnapshot,lppe);
 CloseHandle(hSnapshot);
end;

function MainReadByteIZFile(MainAddress, IDAgent:Cardinal):String;
var HandleWindow : cardinal;
   ipBase: Pointer;
   IpBuf : longint;
   numberRead: DWORD;
begin
HandleWindow:=OpenProcess(PROCESS_VM_READ,False,IDAgent);
ipBase:=ptr($021D44CC);
ReadProcessMemory(HandleWindow, ipBase, Addr(ipbuf), 4, numberRead);
CloseHandle(HandleWindow);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Caption:=MainReadByteIZFile(0,FindProcess("Project2.exe"));
end;


Что тут подправить? :(


 
Leonid Troyanovsky ©   (2010-01-30 13:48) [4]


> Danco ©   (29.01.10 23:07) [3]

> Что тут подправить? :(

Во-первых, положено:
Win32Check(HandleWindow <> 0);
Win32Check(ReadProcessMemory());

Во-вторых, MainReadByteIZFile возвращает пустую строку,
а должна была, хотя бы, Result := IntToStr(ipBuf).

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-01-30 13:57) [5]


> Danco ©   (29.01.10 23:07) [3]

> Что тут подправить? :(

Во-первых, положено:
Win32Check(HandleWindow <> 0);
Win32Check(ReadProcessMemory());

Во-вторых, MainReadByteIZFile возвращает пустую строку,
а должна была, хотя бы, Result := IntToStr(ipBuf).

--
Regards, LVT.


 
Danco ©   (2010-01-31 15:49) [6]

function FindProcess(name: string): Cardinal;
var
hSnapshot: THandle;
lppe: TProcessEntry32;
begin
Result := 0;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if hSnapshot = 0 then
  exit;
lppe.dwSize := SizeOf(TProcessEntry32);
if Process32First(hSnapshot,lppe) then
  repeat
    if name = ExtractFileName(lppe.szExeFile) then
    begin
      Result := lppe.th32ProcessID;
      break;
    end;
  until not Process32Next(hSnapshot,lppe);
CloseHandle(hSnapshot);
end;

function MainReadByteIZFile(MainAddress, IDAgent:Cardinal):String;
var HandleWindow : cardinal;
  ipBase: Pointer;
  IpBuf : longint;
  numberRead: DWORD;
begin
HandleWindow:=OpenProcess(PROCESS_VM_READ,False,IDAgent);
if Win32Check(HandleWindow <> 0) then
begin
 ipBase:=ptr($00000000);
 Win32Check(ReadProcessMemory(HandleWindow, ipBase, Addr(ipbuf), 4, numberRead));
 CloseHandle(HandleWindow);
 Result := IntToStr(ipBuf);
end else
 Result := IntToStr(0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Caption:=MainReadByteIZFile($02253644,FindProcess("Edittitle.exe"));
end;


Теперь выдает ошибку:
Peoject Projec1.exe raised exception class EOSError with message "SystemError. Code:87. Параметр задан не верно". Process stopped. Use Sep or Run to contine.

Какой парамтр не верно? Или я фигню какуюто написал а не код? О_о


 
Leonid Troyanovsky ©   (2010-02-01 11:49) [7]


> Danco ©   (31.01.10 15:49) [6]

ReadProcessMemory(HandleWindow, MainAddress

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
2-1264721972
Danco
2010-01-29 02:39
2010.04.04
Как узнать значения в чужих приложениях?


2-1265019868
Unior
2010-02-01 13:24
2010.04.04
Как открыть запароленный *.mdb в Access?


15-1263479212
Piter
2010-01-14 17:26
2010.04.04
HTML "base href" и JavaScript в IE


15-1263421825
Юрий
2010-01-14 01:30
2010.04.04
С днем рождения ! 14 января 2010 четверг


2-1264873860
antid
2010-01-30 20:51
2010.04.04
изменить звук Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский