Не могу сделать меню на ImGUI

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции
6
Всем привет!
Я пытаюсь сделать меню на имгуи внутри игры, но что-то не получается.
C++:
Expand Collapse Copy
#include <Windows.h>
#include "imgui\impl\imgui_impl_dx9.h"
#include "imgui\impl\imgui_impl_win32.h"

#include "imgui\imconfig.h"
#include "imgui\imgui.h"
#include "imgui\imgui_internal.h"
#include "imgui\imstb_rectpack.h"
#include "imgui\imstb_textedit.h"
#include "imgui\imstb_truetype.h"

DWORD WINAPI DllAttached(LPVOID)
{
    HWND hwnd = FindWindow(NULL, L"AssaultCube");
    ImGui_ImplWin32_WndProcHandler(hwnd, 0, 0, 0);
    ImGui_ImplDX9_NewFrame();
    ImGui_ImplWin32_NewFrame();
    ImGui::NewFrame();
    //Крашится
 ImGui::Begin("myWindow");

    ImGui::EndFrame();

    return 0;
}

BOOL APIENTRY DllMain(
    _In_ HINSTANCE hinstDll,
    _In_ DWORD     fdwReason,
    _In_opt_ LPVOID    lpvReserved
) {
    switch (fdwReason) {
        case DLL_PROCESS_ATTACH:
            DisableThreadLibraryCalls(hinstDll);
            CreateThread(0, 0, DllAttached, 0, 0, 0);

        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}
 
А ImGui::Render() не забыл?
Чтобы выполнить функцию рендер нужна инициализация, но в ней нужен контекст.
Опять краш.
C++:
Expand Collapse Copy
DWORD WINAPI DllAttached(LPVOID)
{
    HWND hwnd = FindWindow(NULL, L"AssaultCube");
    ImGui::Initialize(ImGui::CreateContext()); //Происходит краш
    ImGui::Render();
    ImGui_ImplWin32_WndProcHandler(hwnd, 0, 0, 0);
  //  ImGui::CreateContext();

    ImGui_ImplDX9_NewFrame();

    ImGui_ImplWin32_NewFrame();
    ImGui::NewFrame();
   
    ImGui::Begin("myWindow");

    ImGui::EndFrame();

    return 0;
}
 
Чтобы выполнить функцию рендер нужна инициализация, но в ней нужен контекст.
Опять краш.
C++:
Expand Collapse Copy
DWORD WINAPI DllAttached(LPVOID)

    ImGui::Begin("myWindow");

    return 0;
}
После бегина всегда должен быть ImGui::End() и ImGui::Render() после всего
 
Чтобы выполнить функцию рендер нужна инициализация, но в ней нужен контекст.
Опять краш.
C++:
Expand Collapse Copy
DWORD WINAPI DllAttached(LPVOID)
{
    HWND hwnd = FindWindow(NULL, L"AssaultCube");
    ImGui::Initialize(ImGui::CreateContext()); //Происходит краш
    ImGui::Render();
    ImGui_ImplWin32_WndProcHandler(hwnd, 0, 0, 0);
  //  ImGui::CreateContext();

    ImGui_ImplDX9_NewFrame();

    ImGui_ImplWin32_NewFrame();
    ImGui::NewFrame();
  
    ImGui::Begin("myWindow");

    ImGui::EndFrame();

    return 0;
}
И почему ты не хукнёшь EndScene?
P.S - Инициализация же сама происходит при создании нового фрейма
1551288938729.png
 
C++:
Expand Collapse Copy
#include <Windows.h>
#include "imgui\impl\imgui_impl_dx9.h"
#include "imgui\impl\imgui_impl_win32.h"

#include "imgui\imconfig.h"
#include "imgui\imgui.h"
#include "imgui\imgui_internal.h"
#include "imgui\imstb_rectpack.h"
#include "imgui\imstb_textedit.h"
#include "imgui\imstb_truetype.h"


DWORD WINAPI DllAttached(LPVOID)
{
    HWND hwnd = FindWindow(NULL, L"AssaultCube");
    ImGui::CreateContext();
        ImGuiIO& io = ImGui::GetIO();
    io.DisplaySize.x = 400.0f;
    io.DisplaySize.y = 300.0f;

    ImGui::Render();
    // Shutdown
   /* ImGui::DestroyContext();

    ImGui::Render();
    ImGui_ImplWin32_WndProcHandler(hwnd, 0, 0, 0);
  //  ImGui::CreateContext();

    ImGui_ImplDX9_NewFrame();

    ImGui_ImplWin32_NewFrame();*/
    ImGui::NewFrame();
    
    ImGui::Begin("myWindow");


    ImGui::End();
    ImGui::EndFrame();

    return 0;
}

BOOL APIENTRY DllMain(
    _In_ HINSTANCE hinstDll,
    _In_ DWORD     fdwReason,
    _In_opt_ LPVOID    lpvReserved
) {
    switch (fdwReason) {
        case DLL_PROCESS_ATTACH:
            DisableThreadLibraryCalls(hinstDll);
            CreateThread(0, 0, DllAttached, 0, 0, 0);

        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}
Вот код, который сейчас
 
подгрузи нужную длл, и создай свою таблицу
Подгрузил библиотеку d3d9.dll
Подгрузил библиотеку с меню
Не работает.
При нажатии на кнопку END нельзя двигаться (только крутить камерой) при повторном нажатии можно

В каком плане создать свою таблицу?
 
другой вариант:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, авторизуйтесь для просмотра ссылки.
Там консольные менюшки)))
Как их делать я понимаю и как сам чит делает работы с заменами значений по адресам это тоже понимаю.
Хочется красивую внутриигровую менюшку сделать
 
Подгрузил библиотеку d3d9.dll
Подгрузил библиотеку с меню
Не работает.
При нажатии на кнопку END нельзя двигаться (только крутить камерой) при повторном нажатии можно

В каком плане создать свою таблицу?
раз игра не поддерживает d3d9 то тебе нужно создать в треде процесса таблицу виртуальных методов d3d9.
Подгружаешь к процессу d3d9.dll
Создаешь окно(не важно по каким параметрам)
создаешь устройство d3d
Ставишь хук на нужный тебе метод, там рисуешь все что тебе угодно.

Но в твоем случаи можно поступить проще: игра работает на основе OpenGL*, а ImGui прекрасно это "ест". Пример хуков я скинул выше, а пример Gui есть на гите (
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
 
Там консольные менюшки)))
Как их делать я понимаю и как сам чит делает работы с заменами значений по адресам это тоже понимаю.
Хочется красивую внутриигровую менюшку сделать

Где там консольное меню?
Пожалуйста, авторизуйтесь для просмотра ссылки.

687474703a2f2f692e696d6775722e636f6d2f5078616e53484b2e6a7067
 
Назад
Сверху Снизу