|
Читать чат - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
12.01.2012, 00:15
|
#1
|
|
|
|
Сержант
|
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
|
Читать чат
Подскажите пожайлуста, если не трудно - с примером, как прочитать групчат?
|
|
|
12.01.2012, 00:58
|
#2
|
|
|
|
Главнокомандующий
|
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Re: Читать чат
gurin, взять оффсеты чата и вычитать весь блок целиком, отделить зеленые сообщения от других по коду цвета, который присутствует в сообщении.
|
|
|
Пользователь сказал cпасибо:
|
|
12.01.2012, 01:35
|
#3
|
|
|
|
Сержант
|
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
|
Re: Читать чат
я попробовал, текст что-то не удалось получить, потому и просил с примером.
|
|
|
12.01.2012, 01:43
|
#4
|
|
|
|
Главнокомандующий
|
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Re: Читать чат
Код:
int tmpMessageCount = ReadInt16FromMemory(ChatMessagesCount);
for (int i = 0; i < tmpMessageCount; i++)
{
messageBase = ReadInt32FromMemory(ReadInt32FromMemory(ChatStartAddress) + ((i * 0xC) + 0x8));
if (messageBase != 0)
{
Messages.Add(ReadStringFromMemory(messageBase + 0x0, 4096));
}
}
нашел среди старых проектов.
|
|
|
12.01.2012, 01:46
|
#5
|
|
|
|
Сержант
|
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
|
Re: Читать чат
я делаю так:
Код:
Chat := TStringList.Create;
....
ReadProcessMemory(hProcess, ptr(GamerOffsets[ChatNumber]), @ChatLen, sizeof(ChatLen), BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(GamerOffsets[ChatStart]), @start_addr, sizeof(start_addr), BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(GamerOffsets[ChatEnd]), @end_addr, sizeof(end_addr), BytesCountOfRead);
addr := start_addr;
for strNo := 1 to ChatLen do
begin
str[0] := #0;
i := 0;
try
repeat
ReadProcessMemory(hProcess, ptr(addr), @ch, 2, BytesCountOfRead);
str[i] := ch;
addr := addr + 2;
inc(i);
until (ord(ch) = 0) or (i >= High(str));
except
end;
if i >= 1 then
str[i] := #0;
st := Str;
Chat.Add(st);
end;
но получаю какие-то зякозябры
количество сообщений в чате верное
Добавлено через 16 минут
получил 1-ю строку нормально (при i=0)
но при i=1 вот тут
messageBase = ReadInt32FromMemory(ReadInt32FromMemory(ChatStartA ddress) + ((i * 0xC) + 0x8));
получаю значение messageBase = $FFFFFFFF
это же простое мат выражение? или как-то иначе тут все расшифровывается?
просто непонятно зачем в
ReadStringFromMemory(messageBase + 0x0, 4096)
+ 0x0 стоит...
Добавлено через 25 минут
нашел ошибку вот тут
messageBase = ReadInt32FromMemory(ReadInt32FromMemory(ChatStartA ddress) + ((i * 0xC) + 0x8));
надо
messageBase = ReadInt32FromMemory(ReadInt32FromMemory(ChatStartA ddress) + ((i * 0x1C) + 0x8));
Добавлено через 28 минут
Может кому пригодится, привожу рабочий код на Delphi
Код:
ReadProcessMemory(hProcess, ptr(ChatStartAddr), @start_addr, sizeof(start_addr), BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(ChatNumberAddr), @ChatLen, sizeof(ChatLen), BytesCountOfRead);
for strNo := 0 to ChatLen-1 do
begin
str[0] := #0;
i := 0;
try
ReadProcessMemory(hProcess, ptr(start_addr + ((StrNo * $1C) + $8)), @addr, sizeof(addr), BytesCountOfRead);
if addr <> 0 then
repeat
ReadProcessMemory(hProcess, ptr(addr), @ch, 2, BytesCountOfRead);
str[i] := ch;
addr := addr + 2;
inc(i);
until (ord(ch) = 0) or (i >= High(str));
except
end;
if i >= 1 then
str[i] := #0;
st := Str;
Chat.Add(st);
end;
Последний раз редактировалось gurin; 12.01.2012 в 08:42.
Причина: Добавлено сообщение
|
|
|
12.01.2012, 11:05
|
#6
|
|
|
|
Главнокомандующий
|
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Re: Читать чат
|
|
|
12.01.2012, 18:54
|
#7
|
|
|
|
Сержант
|
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
|
Re: Читать чат
Да, я понимаю. Просто уточнил где была неточность на тот случай, если кто будет озадачен такой же проблемой.
ОГРОМНОЕ спасибо за помощь.
|
|
|
12.01.2012, 20:38
|
#8
|
|
|
|
Главнокомандующий
|
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Re: Читать чат
gurin, всегда пожалуйста.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
[Помогите!] Читать!!!!
|
qwe1qwe1qwe1 |
Вопросы и ответы, обсуждение |
1 |
01.04.2011 19:12 |
Прочитать!
|
JIominat |
Общение и обсуждение CrossFire |
3 |
27.12.2010 04:42 |
ЧИТАТЬ!
|
Chiteruga |
Общение и обсуждение, архив Point Blank |
3 |
01.06.2010 12:16 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 12:01.
|
|