Детальной описи нигде не видел, большинство просто шлёт ссобщения в чат через WinAPI Можешь, конечно, написать инжектор пакетов чата, если есть желание
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Hilling, я читал текст по другому. Я постарался перевести код с делфи на плюсы, но в правильности не уверен на 100%, по этому выкладываю и оригинал, и перевод.
function ReadPlayerName(hProcess,data:DWord): string;
var
i,rw:DWord;
ch:WideChar;
wch:array[0..255] of WideChar;
str:string;
begin
i:=0;
repeat
ReadProcessMemory(hProcess,ptr(data),@ch,2,rw);
data:=data+2;
wch[i]:=ch;
inc(i);
until
(ord(ch)=0) or (i>=255);
i:=0;
str:='';
repeat
str:=str+wch[i];
inc(i);
until
wch[i]='';
result:=str;
end;
AnsiString ReadStr(HANDLE hProcess, DWORD Data)
{
int i=0;
wchar_t ch;
wchar_t wch [256];
AnsiString str="";
do
{
ReadProcessMemory(hProcess, (LPVOID) Data, &ch, 2, NULL);
Data = Data + 2;
wch[i] = ch;
i++;
}
while(ch!=0 && i<=255);
i = 0;
do
{
str = str + wch[i];
i++;
}
while(wch[i]!=0);
return str;
}
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
ReadProcessMemory (hProcess, Pointer($B53E9C), @ChatLen, sizeof(ChatLen), rw);
if (ChatLen > 0)and (ChatLen >chat) then
begin
for strNo :=chat to ChatLen - 1 do
begin
start_addr:=getDWORD($B53E90);
addr:=getDWORD(start_addr+$1C*strNo);
addr:=getDWORD(addr+$8);
ss:= getSTRING(addr,256);
memo2.Lines.add(ss);
end;
end;
chat :=ChatLen;
то читает только первое сообщение, т.е. когда переменная StrNo=0
а когда
Код:
ReadProcessMemory (hProcess, Pointer($B53E9C), @ChatLen, sizeof(ChatLen), rw);
if (ChatLen > 0)and (ChatLen >chat) then
begin
for strNo :=chat to ChatLen - 1 do
begin
start_addr:=getDWORD($B53E90);
// addr:=getDWORD(start_addr+$1C*strNo);
n:=1+StrNo*7;
addr:=getDWORD(start_addr+$8*n);
ss:= getSTRING(addr,256);
memo2.Lines.add(ss);
end;
end;
chat :=ChatLen;
то читает сообщении но при этом пропуская по одному сообщению..
Подскажите где ошибка?
Код:
{==========================================|
| Читаем DWORD |
|==========================================}
function getDWORD(data: dword): dword;
var
rw: dword;
begin
if Connected then
begin
ReadProcessMemory(hProcess,ptr(data),@Result,sizeof(Result),rw);
end;
end;
{==========================================|
| Читаем строку по адресу |
|==========================================}
function getSTRING(ReadAddress, SizeBytes: DWORD): string;
var
str: array[0..255] of WideChar;
rw: dword;
begin
ReadProcessMemory(hProcess,Pointer(ReadAddress),@str,SizeBytes,rw);
Result:= str;
end;
________________ PWA for PWPVP
Автор программы PwRuf - Bot и PwRuf - Crafter
Последний раз редактировалось rufat2005; 19.01.2013 в 06:05.