Хочу поставить хук на вывод сообщений сервера в чат для их фильтрации в дальнейшем.
При добавлении сообщения вызывается функа по адресу 0x67BE0 (для samp 0.3dl), назовем ее ADDTOCHATWND_1 (они рядом расположены, addtochatwnd на 0x80 раньше идёт). Она принимает 2 параметра:
1 - (скорее всего) указатель на stChatInfo (не суть)
2 - указатель на строку, которую нужно вывести
Код хука следующий:
FileAppend нормально записывает строку чата в файл, но снятие хука с последующим вызовом оригинальной функи не приводят к появлению сообщений в чате (то есть, в файл строки пишутся, но на экран в чате не выводятся). В чем может быть проблема?
При добавлении сообщения вызывается функа по адресу 0x67BE0 (для samp 0.3dl), назовем ее ADDTOCHATWND_1 (они рядом расположены, addtochatwnd на 0x80 раньше идёт). Она принимает 2 параметра:
1 - (скорее всего) указатель на stChatInfo (не суть)
2 - указатель на строку, которую нужно вывести
Код хука следующий:
AutoHotKey:
#include AHK-HOOK-API.ahk
#Persistent
;~ global FUNC_SAMP_ADDTOCHATWND := 0x67B60
global FUNC_SAMP_ADDTOCHATWND_1 := 0x67BE0 ; 0.3DL
Sleep 3000
global dwSAMP := GetModuleHandle("samp.dll")
if (!dwSAMP)
{
MsgBox, Не найден адрес samp.dll
ExitApp
}
global addChatMessage1Hook := new Hook(0, dwSAMP + FUNC_SAMP_ADDTOCHATWND_1, "Hook_addChatMessage_1")
Hook_addChatMessage_1(dwChatInfo, wText)
{
FileAppend, % StrGet(wText) "`n", chat.log
addChatMessage1Hook.setStatus(false)
DllCall(addChatMessage1Hook.ProcAddr, "Ptr", dwChatInfo, "Ptr", wText)
addChatMessage1Hook.setStatus(true)
}
Последнее редактирование: