Хочу сделать метод, что бы через комьюнти переименовывать окно в ник активного перса. Не могу разобраться как это делать, подскажите куда копать? Или с серверной части не смогу это сделать и надо работать с клиентом?
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Это надо заморачиваться с WinAPI. Тебе нужно найти подходящий пакет (выбор персонажа или вход в мир, хз), в котором бы хранился никнейм игрока и при вызове функции обработки этого пакета добавляешь кусок с переименованием окна по HWND. Примерно так:
SendMessage(GetForegroundWindow(), WM_SETTEXT, 0, szCharacterName);
Хотя тут наверное стоит юзать не GetForegroundWindow, но тут я уже хз.
типа таких? AbnormalStatusWndДа, это не надежно, нужно конкретно из текущего клиента вытащить hwnd окна.
типа таких? AbnormalStatusWnd
и о какой хронике тс имел ввиду?
Тебя троллят, эти окна являются частью XMLUI (привет редактору acmi). Просто делаем врезку на этапе CharSelected и изменяем название окна и вуаляМожно так, но, судя по названию, конкретно AbnormalStatusWnd, видимо, функция обработки сообщений окна AbnormalStatus, а нам нужно другое окно. Да и дергаться она будет очень часто, так что перехватывать ее не особо хорошая затея. Я бы сделал так, патчим CreateWindowExW, оттуда достаем lpClassName, если он такой же, как у главного окна l2 (там константная строка, уже не помню, какая, но узнать легко), то дергаем оригинальную CreateWindowExW, запоминая возвращенный ей hwnd.
Тебя троллят, эти окна являются частью XMLUI (привет редактору acmi). Просто делаем врезку на этапе CharSelected и изменяем название окна и вуаля
В игре их 236 примерно, прикреплю тхт может автору полезно)видимо, функция обработки сообщений окна AbnormalStatus, а нам нужно другое окно
Вот только штука в том, что ТСу нужны не внутренние окна, а самое главное окно. Тем более AbnormalStatusWnd на этапе выбора персонажа скорее всего вернет nullptr, так как там это окно отсутствует.В игре их 236 примерно, прикреплю тхт может автору полезно)
Интересно что мешает IDA RPO сделать бряк на функции и посмотреть что куда и как при вызове )
Значит нужно ставить брекпоинт на UNetworkHandlerВот только штука в том, что ТСу нужны не внутренние окна, а самое главное окно. Тем более AbnormalStatusWnd на этапе выбора персонажа скорее всего вернет nullptr, так как там это окно отсутствует.
void find_hwnd(HWND &hwnd)
{
DWORD id = 0x666;
while (true)
{
::GUITHREADINFO thread_info;
thread_info.cbSize = sizeof(thread_info);
if (::GetGUIThreadInfo(id, &thread_info))
{
hwnd = thread_info.hwndActive;
break;
}
::Sleep(1000);
}
}
Это, конечно, только концепция, по хорошему надо без бесконечного цикла и слипов сделать, но для того, что бы точно узнать, когда окно создано, придется либо ставить хуки через SetWindowsHookEx, либо ставить хуки на api, а пример выше определяет hwnd без всяких модификаций.