-
Автор темы
- #1
Всем привет. Делаю простенький оверлей для доты на Imgui с бэкендом d3d11 и заметил, что после инжекта ввод с клавиатуры и мыши в доте не работает, пока не сделать Alt+Tab из игры и в игру. Хук стандартный (MinHook обернутый в классы с деструкторами), WindowProc выглядит вот так:
Функция вызывается:
Основу для кода брал с опенсорсного чита (
Предполагаю, что это как-то может быть связано с вызовом ::GetForegroundWindow.
Буду благодарен за любые идеи, почему так происходит и как это фиксить.
C++:
extern auto ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -> LRESULT;
auto WINAPI WinProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT
{
namespace m = d2a::managers;
static auto input_fix_flag = std::once_flag();
m::IO::ref_mut().process(wparam, msg);
if(not m::Draw::ref().show_ui())
return ::CallWindowProcA(m::Draw::ref_mut().d3d11_data_mut().oWndProc, hwnd, msg, wparam, lparam);
::ImGui_ImplWin32_WndProcHandler(hwnd, msg, wparam, lparam);
std::call_once(input_fix_flag, [hwnd, msg, wparam, lparam]() {
llog::trace("fixing input");
::CallWindowProcA(
m::Draw::ref_mut().d3d11_data_mut().oWndProc,
hwnd,
msg,
wparam,
lparam
);
llog::debug("fixing input......................... OK");
});
return 1;
}
Основу для кода брал с опенсорсного чита (
Пожалуйста, авторизуйтесь для просмотра ссылки.
, спасибо автору за такие исходники) и понемногу переписываю ее на более безопасный вариант кода, у него тоже висит issue с этой проблемой (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).Предполагаю, что это как-то может быть связано с вызовом ::GetForegroundWindow.
Буду благодарен за любые идеи, почему так происходит и как это фиксить.