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

Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции[?]
6
Поинты[?]
0
Всем привет!
Я пытаюсь сделать меню на имгуи внутри игры, но что-то не получается.
C++:
#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;
}
 
Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции[?]
6
Поинты[?]
0
А ImGui::Render() не забыл?
Чтобы выполнить функцию рендер нужна инициализация, но в ней нужен контекст.
Опять краш.
C++:
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;
}
 
#СЛЫШКУПИ
Забаненный
Статус
Оффлайн
Регистрация
31 Янв 2019
Сообщения
116
Реакции[?]
27
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
25 Дек 2018
Сообщения
13
Реакции[?]
0
Поинты[?]
0
Чтобы выполнить функцию рендер нужна инициализация, но в ней нужен контекст.
Опять краш.
C++:
DWORD WINAPI DllAttached(LPVOID)

    ImGui::Begin("myWindow");

    return 0;
}
После бегина всегда должен быть ImGui::End() и ImGui::Render() после всего
 
Начинающий
Статус
Оффлайн
Регистрация
25 Дек 2018
Сообщения
13
Реакции[?]
0
Поинты[?]
0
Чтобы выполнить функцию рендер нужна инициализация, но в ней нужен контекст.
Опять краш.
C++:
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
 
Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции[?]
6
Поинты[?]
0
C++:
#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;
}
Вот код, который сейчас
 
Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции[?]
6
Поинты[?]
0
В том то и проблема, что в теме D3D я нулина, а уж тем более что-то там сделать для меня - анрил.
 
Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции[?]
6
Поинты[?]
0
AssaultCube не поддреживает d3d9 и меню также не работает. Всем спасибо!
 
Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции[?]
6
Поинты[?]
0
подгрузи нужную длл, и создай свою таблицу
Подгрузил библиотеку d3d9.dll
Подгрузил библиотеку с меню
Не работает.
При нажатии на кнопку END нельзя двигаться (только крутить камерой) при повторном нажатии можно

В каком плане создать свою таблицу?
 
Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции[?]
6
Поинты[?]
0
другой вариант:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, авторизуйтесь для просмотра ссылки.
Там консольные менюшки)))
Как их делать я понимаю и как сам чит делает работы с заменами значений по адресам это тоже понимаю.
Хочется красивую внутриигровую менюшку сделать
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Подгрузил библиотеку d3d9.dll
Подгрузил библиотеку с меню
Не работает.
При нажатии на кнопку END нельзя двигаться (только крутить камерой) при повторном нажатии можно

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

Но в твоем случаи можно поступить проще: игра работает на основе OpenGL*, а ImGui прекрасно это "ест". Пример хуков я скинул выше, а пример Gui есть на гите (
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Там консольные менюшки)))
Как их делать я понимаю и как сам чит делает работы с заменами значений по адресам это тоже понимаю.
Хочется красивую внутриигровую менюшку сделать
Где там консольное меню?
Пожалуйста, авторизуйтесь для просмотра ссылки.

 
Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции[?]
6
Поинты[?]
0
Сверху Снизу