• Как сделать, чтобы приложение Java с классом Robot работало в проекте STALCRAFT?

    @DeletedUserC2C
    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 начали нормально работать внутри игры. Не факт, что данный способ поможет вам конкретно с выставлением фокуса на эту игру, но будет полезен для поиска нужной информации, а также дальнейшего взаимодействия с игрой.
    Ответ написан
    Комментировать