Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как поставить окно имгуи заинжекченное в кс2 на передний план?

Михаил Морозов Знаток (315), на голосовании 3 месяца назад
Ну типо сделал гуи программу с имуги на С++, скомпилировал в длл, без ошибок успешно заинжектил в кску, в коде прописано что гуи сразу становится видимой, но на инсерт можно скрывать/раскрывать если не скрыта, нооо в игре она не отображается.. Хз почему, т.к. если компилировать в .exe и открывать его все корректно отображается. Хелп плиз. Я выставил чтобы окно всегда было на переднем плане, но и это не помогло.. Я не так давно начал кодить на С++, прошу не засирать
Голосование за лучший ответ
Сухачев Мудрец (12961) 4 месяца назад
Для отображения GUI на основе ImGui, инжектированного в игру, такие как CS
или CS2, нужно убедиться, что правильные функции рендеринга вызываются в контексте игрового окна. Вот несколько шагов, которые могут помочь в решении вашей проблемы:

Правильная настройка контекста:

Убедитесь, что вы правильно создаете и инициализируете контекст ImGui в вашем хук-коде.
Хук рендеринга:

Вам нужно захватить и перехватить правильную функцию рендеринга DirectX или OpenGL, используемую игрой, чтобы вставить ваш рендеринг GUI в игровой цикл.
Проверка состояния GUI:

Убедитесь, что окно GUI действительно должно быть видимым. Возможно, что-то блокирует его отображение или его альфа-канал установлен на ноль.
Вот примерный код для хука DirectX, чтобы правильно отрисовывать GUI в контексте игры:
 #include  
#include "imgui.h"
#include "imgui_impl_dx9.h"

typedef HRESULT(APIENTRY* EndSceneFn)(LPDIRECT3DDEVICE9 pDevice);
EndSceneFn oEndScene;

HRESULT APIENTRY hkEndScene(LPDIRECT3DDEVICE9 pDevice) {
ImGui_ImplDX9_NewFrame();
ImGui::Begin("My ImGui Window");
ImGui::Text("Hello, world!");
ImGui::End();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
return oEndScene(pDevice);
}

void InitImGui(LPDIRECT3DDEVICE9 pDevice) {
ImGui::CreateContext();
ImGui_ImplDX9_Init(pDevice);
}

void HookEndScene() {
oEndScene = (EndSceneFn)DetourFunction((BYTE*)GetEndSceneAddress(), (BYTE*)hkEndScene);
}
Пошаговые действия:
Инициализация ImGui:

Убедитесь, что вы вызываете ImGui::CreateContext() и ImGui_ImplDX9_Init(pDevice) в правильном месте, например, при инициализации вашего хука.
Создание контекста рендеринга:

Убедитесь, что контекст рендеринга ImGui обновляется в каждом кадре, используя ImGui_ImplDX9_NewFrame().
Рендеринг GUI:

После обновления контекста рендеринга, создайте и отрисуйте ваше GUI окно внутри хука функции рендеринга.
Чистка ресурсов:

Не забудьте корректно чистить ресурсы ImGui при завершении работы вашего инжектора.
Дебаг:
Логирование:

Добавьте логирование в критические места вашего кода, чтобы убедиться, что все шаги выполняются корректно.
Режим отладки:

Запустите игру в режиме отладки, чтобы увидеть, вызываются ли ваши хуки и корректно ли создается контекст ImGui.
Если после выполнения всех шагов GUI все еще не отображается, возможно, проблема в конкретной реализации вашей игры или инжектора. В таком случае, исследуйте использование других хук-функций рендеринга или других подходов к инжекту для вашей игры.
Похожие вопросы