2 года назад решил написать пару макросов для данной игры. Но столкнулся со схожей проблемой. Код не выполнял действия внутри игры.
После пары дампов и небольшого ревёрса кода ск, я обнаружил некоторую защиту от любого инжекта нажатий клавиш и подобного. Выглядит примерно так.
if (nCode == HC_ACTION) {
switch (wParam)
{
case WM_KEYDOWN:
KBDLLHOOKSTRUCT* info = (KBDLLHOOKSTRUCT*)lParam;
bool injectedKey = (info->flags & LLKHF_INJECTED);
if (injectedKey)
log_text("[DLL] Injected key detected\n");
break;
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
Написал небольшую DLL, которая ставит detour hook на функцию WinAPI SetWindowsHookEx, в которой подменяю нужный мне хук на свою функцию.
HHOOK __stdcall hook_set_window_hook(int idHook, HOOKPROC lpfn, HINSTANCE hmod, DWORD dwThreadId)
{
HOOKPROC func = lpfn;
if (idHook == WH_KEYBOARD_LL)
{
log_text("idHook: %d\nHookFunction: %p\n", idHook, lpfn);
func = HookProcedure;
}
return(o_set_window_hook(idHook, func, hmod, dwThreadId));
}
После этого макросы написанные при помощи WinAPI и с помощью программ подобных AutoHotKey начали нормально работать внутри игры. Не факт, что данный способ поможет вам конкретно с выставлением фокуса на эту игру, но будет полезен для поиска нужной информации, а также дальнейшего взаимодействия с игрой.