/D3D9-Hook-ImGui

D3D9 Hook with ImGui integration (x86 / x64) - Make DirectX 9 internal menu with ImGui

Primary LanguageC++GNU General Public License v3.0GPL-3.0

Project Banner

D3D9 Hook ImGui

C++ Windows x86 x64

📖 Project Overview :

D3D9 Hook with ImGui integration written in C++, works on x86 and x64 with all librairies and includes.

This use the dummy device technique to retrieve the virtual method table of DirectX 9.

Used librairies :

🚀 Getting Started

This project use MS Detours library for hooking and obviously DirectX 9 SDK.

MS Detours library is already include in the project folder, but if you don't have DirectX SDK you can download it here.

Note
Make sure that DXSDK_DIR is declared in your environment variables.

To see your environment variables :

Settings --> System --> About --> System Advanced Settings --> Environment Variables

Visual Studio :

  1. Open the solution file (.sln).
  2. Build the project in Release (x86 or x64)

Every configuration in x86 / x64 (Debug and Realese) are already configured with librairies and includes.

Other IDE using CMAKE :

This CMakeLists.txt should compile the project.

cmake_minimum_required(VERSION 3.0)
project(D3D9_HOOK)

set(CMAKE_CXX_STANDARD 17)
include_directories(Detours/include $ENV{DXSDK_DIR}Include)
link_directories(Detours/x86 $ENV{DXSDK_DIR}Lib/x86/)
file(GLOB ImGui ImGui/*.cpp ImGui/*.h)

add_library(D3D9_HOOK SHARED framework.h pch.h dllmain.cpp Hook.h Hook.cpp Drawing.h Drawing.cpp ${ImGui})
target_link_libraries(D3D9_HOOK detours.lib d3d9.lib d3dx9.lib)

Tested on CLion with MSVC compiler, you can get Visual Studio Build Tools here.

🪝 Hooking

You can hook every functions of DirectX 9 by changing the virtual function index (in Hook.cpp) :

Here I hook EndScene Function.

oEndScene = (tEndScene)d3d9Device[42];

All functions index of DirectX 9 are here.

🧪 Example

Call Of Duty : World at War (x86)

Exemple x86

DirectX 9 Example Program (x64)

Exemple x64