Почему у меня не получается взаимодействие с imgui

Lusikkip

Новичок
Автор темы
10
3
C++:
#include "includes.h"

#ifdef _WIN64
#define GWL_WNDPROC GWLP_WNDPROC
#endif

extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

EndScene oEndScene = NULL;
WNDPROC oWndProc;
static HWND window = NULL;

void InitImGui(LPDIRECT3DDEVICE9 pDevice)
{
    ImGui::CreateContext();
    ImGuiIO& io = ImGui::GetIO();
    io.ConfigFlags = ImGuiConfigFlags_NoMouseCursorChange;
    ImGui_ImplWin32_Init(window);
    ImGui_ImplDX9_Init(pDevice);
}

bool init = false;
long __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
    if (!init)
    {
        InitImGui(pDevice);
        init = true;
    }

    ImGui_ImplDX9_NewFrame();
    ImGui_ImplWin32_NewFrame();
    ImGui::NewFrame();

 
    ImGui::Begin("ImGui Menu"); 
    if (ImGui::Button("Click Me"))
    {
        
        MessageBox(NULL, "Button clicked!", "Info", MB_OK);
    }
    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 wndProcId;
    GetWindowThreadProcessId(handle, &wndProcId);

    if (GetCurrentProcessId() != wndProcId)
        return TRUE;

    window = handle;
    return FALSE;
}

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

DWORD WINAPI MainThread(LPVOID lpReserved)
{
    bool attached = false;
    do
    {
        if (kiero::init(kiero::RenderType::D3D9) == kiero::Status::Success)
        {
            kiero::bind(42, (void**)&oEndScene, hkEndScene);
            do
                window = GetProcessWindow();
            while (window == NULL);
            oWndProc = (WNDPROC)SetWindowLongPtr(window, GWL_WNDPROC, (LONG_PTR)WndProc);
            attached = true;
        }
    } while (!attached);
    return TRUE;
}

BOOL WINAPI DllMain(HMODULE hMod, DWORD dwReason, LPVOID lpReserved)
{
    switch (dwReason)
    {
    case DLL_PROCESS_ATTACH:
        DisableThreadLibraryCalls(hMod);
        CreateThread(nullptr, 0, MainThread, hMod, 0, nullptr);
        break;
    case DLL_PROCESS_DETACH:
        kiero::shutdown();
        break;
    }
    return TRUE;
}



Пытаюсь увеличить окно, не увеличивается, пытаюсь свернуть, не сворачивается, нажимаю на кнопку не нажимается, пытаюсь ввести что то в input, не вводится, ничего не происходит только курсор мыши торчит, и камеру не повернешь
скопировал тему но проблема та же
 

nsxfgbhosdnghfbhpsdng

Участник
15
7
на инсерт открввай или поменяй там кнопку, сделал так, что imgui инициализируется только после хука окна, ввод обрабатывается только при открытом меню, добавил активацию на Insert и корректный выход без блокировок игры и скажи должно все работать
 

Вложения

  • xxx.txt
    3.6 KB · Просмотры: 2

Lusikkip

Новичок
Автор темы
10
3
Нет, я делаю через Kiero Hook. Не понимаю, в чём проблема. Код, который ты прислал, просто останавливает ImGui. Не знаю, как описать — оно появляется в левом углу экрана и просто остаётся там. Перетащить нельзя, открыть тоже нельзя.
на инсерт открввай или поменяй там кнопку, сделал так, что imgui инициализируется только после хука окна, ввод обрабатывается только при открытом меню, добавил активацию на Insert и корректный выход без блокировок игры и скажи должно все работать
 

Вложения

  • 1755291483450.png
    1755291483450.png
    17.6 KB · Просмотры: 50