roten31
@roten31

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

какая проблема? я хочу сделать программу, которая за меня будет пошагово использовать предмет(у меня это еда). Сделал так сказать проверку на работоспособность. Работает с другими окнами. Но как только хочу испробовать на игре, то ничего не происходит. программа даже переключиться на её окно не хочет, хоть будет игра в полноэкранном, хоть в оконном режимах.
если кто не знает, что за STALCRAFT, то это тот же майнкрафт с модами, только через лаунчер запускается отдельный. Но даже в обычном майнкрафте работает код, а вот в сталкрафт нет.
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ответы на вопрос 3
xez
@xez Куратор тега Java
TL Junior Roo
Очень легко.
Пишете код, тестируете его, отлаживаете, исправляете ошибки.
Обычно все работает.
Ответ написан
Комментировать
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Поскольку в хабре нет тега майнкрафт и плагины - то мы можем обсуждать только Java.
Давай код и лог с ошибками. Там уже по ходу жизни будем смотреть.
Ответ написан
@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 начали нормально работать внутри игры. Не факт, что данный способ поможет вам конкретно с выставлением фокуса на эту игру, но будет полезен для поиска нужной информации, а также дальнейшего взаимодействия с игрой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы