• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос Как пофиксить полноэкранный режим

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
4 Авг 2021
Сообщения
59
Реакции
2
Когда делаю инжект в игру в полноэкранный режим, ничего нет. Когда игра находится в оконном режиме, имгуи есть. При переходе на полноэкранный режим с открым меню, игру крашит.
Что делать?
Код:
Expand Collapse Copy
#include "includes.h"

typedef long(__stdcall* EndScene)(LPDIRECT3DDEVICE9);
static EndScene oEndScene = NULL;
WNDPROC oWndProc;
static HWND window = NULL;

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

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;
bool openmenu = false;

// Declare the detour function
long __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
    // ... Your magic here ...

    if (!init) {

        InitImGui(pDevice);
        init = true;

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

    if (openmenu)
    {

        ImGui_ImplDX9_NewFrame();
        ImGui_ImplWin32_NewFrame();

        ImGui::NewFrame();

        ImGui::Begin("ImGui Window");
        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) // 123
{
    DWORD ProcID;
    GetWindowThreadProcessId(handle, &ProcID);

    if (GetCurrentProcessId() != ProcID)
        return TRUE; // skip to next window

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

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

int ZigHeilThread()
{
    if (kiero::init(kiero::RenderType::D3D9) == kiero::Status::Success){
      
            kiero::bind(42, (void**)&oEndScene, hkEndScene);
            window = GetProcessWindow();
            oWndProc = (WNDPROC)SetWindowLongPtr(window,GWL_WNDPROC,(LONG_PTR)WndProc);
        }

    return 0;
}

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID)
{
    DisableThreadLibraryCalls(hInstance);
    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ZigHeilThread, NULL, 0, NULL);
    }

    return TRUE;
}
 
не работал на 9-м дх, но на опыте 11-го ставил еще resize buffer хук с такими же проблемами
а вообще пока гуглил нашел уже существующий тред с такой же проблемой, посмотри там, вроде уже solved
 
не работал на 9-м дх, но на опыте 11-го ставил еще resize buffer хук с такими же проблемами
а вообще пока гуглил нашел уже существующий тред с такой же проблемой, посмотри там, вроде уже solved
thx, попробую
 
Когда делаю инжект в игру в полноэкранный режим, ничего нет. Когда игра находится в оконном режиме, имгуи есть. При переходе на полноэкранный режим с открым меню, игру крашит.
Что делать?
Код:
Expand Collapse Copy
#include "includes.h"

typedef long(__stdcall* EndScene)(LPDIRECT3DDEVICE9);
static EndScene oEndScene = NULL;
WNDPROC oWndProc;
static HWND window = NULL;

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

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;
bool openmenu = false;

// Declare the detour function
long __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
    // ... Your magic here ...

    if (!init) {

        InitImGui(pDevice);
        init = true;

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

    if (openmenu)
    {

        ImGui_ImplDX9_NewFrame();
        ImGui_ImplWin32_NewFrame();

        ImGui::NewFrame();

        ImGui::Begin("ImGui Window");
        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) // 123
{
    DWORD ProcID;
    GetWindowThreadProcessId(handle, &ProcID);

    if (GetCurrentProcessId() != ProcID)
        return TRUE; // skip to next window

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

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

int ZigHeilThread()
{
    if (kiero::init(kiero::RenderType::D3D9) == kiero::Status::Success){
     
            kiero::bind(42, (void**)&oEndScene, hkEndScene);
            window = GetProcessWindow();
            oWndProc = (WNDPROC)SetWindowLongPtr(window,GWL_WNDPROC,(LONG_PTR)WndProc);
        }

    return 0;
}

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID)
{
    DisableThreadLibraryCalls(hInstance);
    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ZigHeilThread, NULL, 0, NULL);
    }

    return TRUE;
}
тебе нужен render target view
 
нужно хукнуть Reset из IDirect3DDevice9
И там сбрасывать дх дату имгуя (ImGui_ImplDX9_InvalidateDeviceObjects и тд)
отсюда можешь взять
Пожалуйста, авторизуйтесь для просмотра ссылки.
(16 vtable idx)
 
Последнее редактирование:
нужно хукнуть Reset из IDirect3DDevice9
И там сбрасывать дх дату имгуя (ImGui_ImplDX9_InvalidateDeviceObjects и тд)
отсюда можешь взять
Пожалуйста, авторизуйтесь для просмотра ссылки.
(16 vtable idx)
если не трудно, куда именно нужно вставить функцию? я просто не силен в +, недавно начал изучать
 
если не трудно, куда именно нужно вставить функцию? я просто не силен в +, недавно начал изучать
я тебе ссылку скинул на готовую функцию, посмотри как он её хукает
 
Назад
Сверху Снизу