Вопрос ImGui menu пропускает клики в игру

Начинающий
Статус
Оффлайн
Регистрация
6 Янв 2020
Сообщения
5
Реакции[?]
2
Поинты[?]
1K
Доброго времени суток, сделал базовое ImGui меню на c++ для кс го. После инжекта в игру обнаружил что окно imgui пропускает клики в игру. Например нажимаю на пустое место в ImGui и в это время игра тоже регистрирует клик в этой области. Как избавится от этого?
Код:
C++:
#include "includes.h"

typedef long(__stdcall* EndScene)(LPDIRECT3DDEVICE9);
static EndScene oEndScene = NULL;
static WNDPROC oWndProc;
static HWND window = NULL;

extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
ImFont* defolt;
ImFont* Logo;
ImFont* Button;
void InitImGui(LPDIRECT3DDEVICE9 pDevice) {
    ImGui::CreateContext();
    ImGuiIO& io = ImGui::GetIO();
    defolt = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\Arial.ttf", 24, NULL, io.Fonts->GetGlyphRangesCyrillic());
    Logo = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\Arial.ttf", 72, NULL, io.Fonts->GetGlyphRangesCyrillic());
    Button = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\Arial.ttf", 32, NULL, io.Fonts->GetGlyphRangesCyrillic());
    io.ConfigFlags = ImGuiConfigFlags_NoMouseCursorChange;
    ImGui_ImplWin32_Init(window);
    ImGui_ImplDX9_Init(pDevice);
}

bool init = false;
bool openmenu = false;

long __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
    if (!init) {
        InitImGui(pDevice);
        init = true;
    }
    // open menu
    if (GetAsyncKeyState(VK_INSERT) & 1) {
        openmenu = !openmenu;
    }
    if (openmenu == true) {
        ImGui_ImplDX9_NewFrame();
        ImGui_ImplWin32_NewFrame();
        ImGui::NewFrame();
        ImGui::SetNextWindowSize(ImVec2(800, 450));
        ImGui::Begin(" ",nullptr, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize);
        ImGui::PushFont(Logo);
        ImGui::SetCursorPosX(23);
        ImGui::TextColored(ImVec4(0.23f, 0.23f, 0.23f, 1.0f), "FL");
        ImGui::PopFont();
        ImGui::PushFont(Button);
        ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor(0.32f,0.32f,0.32f));
        ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor(0.32f, 0.32f, 0.32f));
        ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor(0.32f, 0.32f, 0.32f));
        ImGui::SetCursorPosY(120);
        ImGui::SetCursorPosX(15);
        ImGui::Button(" Legit ",ImVec2(120.0f,70.0f));
        ImGui::SetCursorPosY(200);
        ImGui::SetCursorPosX(15);
        ImGui::Button("Anti-Aim", ImVec2(120.0f, 70.0f));
        ImGui::SetCursorPosY(280);
        ImGui::SetCursorPosX(15);
        ImGui::Button(" Visual ", ImVec2(120.0f, 70.0f));
        ImGui::SetCursorPosY(360);
        ImGui::SetCursorPosX(15);
        ImGui::Button(" Misk ", ImVec2(120.0f, 70.0f));
        ImGui::PopStyleColor(3);
        ImGui::PopFont();
        ImGui::PushFont(defolt);
        ImGui::PopFont();
        ImGui::End();
        ImGui::EndFrame();
        ImGui::Render();
        ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
    }
    return oEndScene(pDevice);
}

LRESULT _stdcall WndProc(const HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    if (true && ImGui_ImplWin32_WndProcHandler(hwnd, uMsg, wParam, lParam))
        return true;
    return CallWindowProc(oWndProc, hwnd, uMsg, wParam, lParam);


}

BOOL CALLBACK EnumWindowsCallBack(HWND handle, LPARAM lParam) {
    DWORD procID;
    GetWindowThreadProcessId(handle, &procID);

    if (GetCurrentProcessId() != procID)
        return TRUE;
    window = handle;
    return false;
}

HWND GetProcessWindow() {
    window = NULL;
    EnumWindows(EnumWindowsCallBack, NULL);
    return window;
}

int mainThread()
{
    if (kiero::init(kiero::RenderType::D3D9) == kiero::Status::Success)
    {
        kiero::bind(42, (void**)&oEndScene, hkEndScene);
        window = GetProcessWindow();
        oWndProc = (WNDPROC)SetWindowLongPtr(window, GWL_WNDPROC, (LONG_PTR)WndProc);
    }

    return 0;
}


BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID)
{
    DisableThreadLibraryCalls(hInstance);

    if (fdwReason == DLL_PROCESS_ATTACH) {
        CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)mainThread, NULL, 0, NULL));
    }
    return TRUE;
}
 
Последнее редактирование:
эс-те́т
Забаненный
Статус
Оффлайн
Регистрация
8 Дек 2019
Сообщения
178
Реакции[?]
270
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
wndproc от imgui подключил?
 
Начинающий
Статус
Оффлайн
Регистрация
6 Янв 2020
Сообщения
5
Реакции[?]
2
Поинты[?]
1K
проблему я решил! Кому надо вот в чем была причина:
C++:
LRESULT _stdcall WndProc(const HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    if (openmenu) {
        ImGui_ImplWin32_WndProcHandler(hwnd, uMsg, wParam, lParam);

            return true;
    }
    return CallWindowProc(oWndProc, hwnd, uMsg, wParam, lParam);


}
 
Emton
Пользователь
Статус
Оффлайн
Регистрация
20 Мар 2021
Сообщения
115
Реакции[?]
40
Поинты[?]
0
проблему я решил! Кому надо вот в чем была причина:
C++:
LRESULT _stdcall WndProc(const HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    if (openmenu) {
        ImGui_ImplWin32_WndProcHandler(hwnd, uMsg, wParam, lParam);

            return true;
    }
    return CallWindowProc(oWndProc, hwnd, uMsg, wParam, lParam);


}
нифига спасибо помог :)
 
Сверху Снизу