Форум: "Начинающим";
Текущий архив: 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