Вопрос Imgui help

Начинающий
Статус
Оффлайн
Регистрация
17 Май 2019
Сообщения
72
Реакции[?]
5
Поинты[?]
0
Меню рисуется, но абсолютно не кликается/не работают элементы/не двигается/не расширяется

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

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

void InitImGui(LPDIRECT3DDEVICE9 pDevice)
{
    ImGui::CreateContext();
    ImGuiIO& io = ImGui::GetIO();
    io.Fonts->AddFontFromFileTTF("C:\\Windows\Fonts\Verdana.ttf", 25, NULL, io.Fonts->GetGlyphRangesCyrillic());
    io.ConfigFlags = ImGuiConfigFlags_NoMouseCursorChange;
    ImGui_ImplWin32_Init(window);
    ImGui_ImplDX9_Init(pDevice);
}



typedef long(__stdcall* EndScene)(LPDIRECT3DDEVICE9);

bool imgui_init = false;
bool menu_show = false;


long __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{

    if (!imgui_init)
    {
        InitImGui(pDevice);
        imgui_init = true;
    }

    if (GetAsyncKeyState(VK_END)) {
        kiero::shutdown();
        return 0;
    }

    if (GetAsyncKeyState(VK_INSERT) & 1)
    {
        menu_show = !menu_show;
    }


    if (menu_show) {
        ImGui_ImplDX9_NewFrame();
        ImGui_ImplWin32_NewFrame();

        ImGui::NewFrame();

        ImGui::Begin("ImGui Window");


        ImGui::Checkbox("test checkbox", &test_checkbox);
        ImGui::SliderInt("test slider", &test_slider, -1337, 1337);

        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; // skip to next window

    window = handle;
    return FALSE; // window found abort search
}

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

DWORD WINAPI kThread(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, GWLP_WNDPROC, (LONG_PTR)WndProc);
            attached = true;
        }
    } while (!attached);
    return TRUE;
}
 
Забаненный
Статус
Оффлайн
Регистрация
5 Сен 2020
Сообщения
986
Реакции[?]
275
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
посмотри как тут рисуется
Пожалуйста, авторизуйтесь для просмотра ссылки.
мб поймешь почему у тебя не работает
 
Начинающий
Статус
Оффлайн
Регистрация
17 Май 2019
Сообщения
72
Реакции[?]
5
Поинты[?]
0
Начинающий
Статус
Оффлайн
Регистрация
17 Май 2019
Сообщения
72
Реакции[?]
5
Поинты[?]
0
на какую игру чит и какая версия дх9 в хукеи и самой игре?
Как уже ответили, это Dota, подозреваю с ней что-то отельное нужно делать, dx9.

Уже много всякого перепробывал с uc, смотрел гиты, просто нет ничего связанного imgui с дотой
 
Олдфаг
Статус
Оффлайн
Регистрация
4 Янв 2020
Сообщения
2,994
Реакции[?]
1,275
Поинты[?]
19K
Как уже ответили, это Dota, подозреваю с ней что-то отельное нужно делать, dx9.

Уже много всякого перепробывал с uc, смотрел гиты, просто нет ничего связанного imgui с дотой
попробуй другие версии dx, может заработает
 
эс-те́т
Забаненный
Статус
Оффлайн
Регистрация
8 Дек 2019
Сообщения
178
Реакции[?]
270
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
WndProc

1628946240252.png
)))

Код:
WNDPROC WndProc_o = nullptr; 
LRESULT CALLBACK hWndProc1(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 

// Init
HWND hWindow = FindWindowA(NULL, "Dota 2");
WndProc_o = (WNDPROC)SetWindowLongPtr(hWindow, GWLP_WNDPROC, (LONG_PTR)hWndProc1);

LRESULT CALLBACK hWndProc1(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

    if (ImGui::GetCurrentContext() == NULL)
        return 0;

    if (Menu::Get().IsVisible())
    {
        ImGuiIO& io = ImGui::GetIO();
        switch (uMsg)
        {
        case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK:
        case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK:
        case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK:
        {
            int button = 0;
            if (uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK) button = 0;
            if (uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK) button = 1;
            if (uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK) button = 2;
            if (!ImGui::IsAnyMouseDown() && ::GetCapture() == NULL)
                ::SetCapture(hwnd);
            io.MouseDown[button] = true;
            return 1;
        }
        case WM_LBUTTONUP:
        case WM_RBUTTONUP:
        case WM_MBUTTONUP:
        {
            int button = 0;
            if (uMsg == WM_LBUTTONUP) button = 0;
            if (uMsg == WM_RBUTTONUP) button = 1;
            if (uMsg == WM_MBUTTONUP) button = 2;
            io.MouseDown[button] = false;
            if (!ImGui::IsAnyMouseDown() && ::GetCapture() == hwnd)
                ::ReleaseCapture();
            return 1;
        }
        case WM_MOUSEWHEEL:
            io.MouseWheel += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
            return 1;
        case WM_MOUSEHWHEEL:
            io.MouseWheelH += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
            return 1;
        case WM_MOUSEMOVE:
            io.MousePos.x = (signed short)(lParam);
            io.MousePos.y = (signed short)(lParam >> 16);
            return 1;
        case WM_KEYDOWN:
        case WM_SYSKEYDOWN:
            if (wParam < 256)
                io.KeysDown[wParam] = 1;
            return 1;
        case WM_KEYUP:
        case WM_SYSKEYUP:
            if (wParam < 256)
                io.KeysDown[wParam] = 0;
            return 1;
        case WM_CHAR:
            // You can also use ToAscii()+GetKeyboardState() to retrieve characters.
            if (wParam > 0 && wParam < 0x10000)
                io.AddInputCharacter((unsigned short)wParam);
            return 1;
        }
    }

    return CallWindowProc(WndProc_o, hwnd, uMsg, wParam, lParam);
}
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
17 Май 2019
Сообщения
72
Реакции[?]
5
Поинты[?]
0
WndProc

Посмотреть вложение 166199
)))

Код:
WNDPROC WndProc_o = nullptr;
LRESULT CALLBACK hWndProc1(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

// Init
HWND hWindow = FindWindowA(NULL, "Dota 2");
WndProc_o = (WNDPROC)SetWindowLongPtr(hWindow, GWLP_WNDPROC, (LONG_PTR)hWndProc1);

LRESULT CALLBACK hWndProc1(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

    if (ImGui::GetCurrentContext() == NULL)
        return 0;

    if (Menu::Get().IsVisible())
    {
        ImGuiIO& io = ImGui::GetIO();
        switch (uMsg)
        {
        case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK:
        case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK:
        case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK:
        {
            int button = 0;
            if (uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK) button = 0;
            if (uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK) button = 1;
            if (uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK) button = 2;
            if (!ImGui::IsAnyMouseDown() && ::GetCapture() == NULL)
                ::SetCapture(hwnd);
            io.MouseDown[button] = true;
            return 1;
        }
        case WM_LBUTTONUP:
        case WM_RBUTTONUP:
        case WM_MBUTTONUP:
        {
            int button = 0;
            if (uMsg == WM_LBUTTONUP) button = 0;
            if (uMsg == WM_RBUTTONUP) button = 1;
            if (uMsg == WM_MBUTTONUP) button = 2;
            io.MouseDown[button] = false;
            if (!ImGui::IsAnyMouseDown() && ::GetCapture() == hwnd)
                ::ReleaseCapture();
            return 1;
        }
        case WM_MOUSEWHEEL:
            io.MouseWheel += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
            return 1;
        case WM_MOUSEHWHEEL:
            io.MouseWheelH += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
            return 1;
        case WM_MOUSEMOVE:
            io.MousePos.x = (signed short)(lParam);
            io.MousePos.y = (signed short)(lParam >> 16);
            return 1;
        case WM_KEYDOWN:
        case WM_SYSKEYDOWN:
            if (wParam < 256)
                io.KeysDown[wParam] = 1;
            return 1;
        case WM_KEYUP:
        case WM_SYSKEYUP:
            if (wParam < 256)
                io.KeysDown[wParam] = 0;
            return 1;
        case WM_CHAR:
            // You can also use ToAscii()+GetKeyboardState() to retrieve characters.
            if (wParam > 0 && wParam < 0x10000)
                io.AddInputCharacter((unsigned short)wParam);
            return 1;
        }
    }

    return CallWindowProc(WndProc_o, hwnd, uMsg, wParam, lParam);
}
Меню перестало рисоваться о.О
 
Начинающий
Статус
Оффлайн
Регистрация
11 Янв 2020
Сообщения
13
Реакции[?]
2
Поинты[?]
0
По идее профитней рисовать на самой панораме доты, как в костыле делали(crutches или как-то так, не помню уже)
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
759
Реакции[?]
328
Поинты[?]
60K
По идее профитней рисовать на самой панораме доты, как в костыле делали(crutches или как-то так, не помню уже)
только не из джаваскрипта. это -фпс гарантировано. онли из плюсов.
 
Сверху Снизу