Universal graphical hook for Direct3D, OpenGL, and Vulkan based games
Windows SDK (Direct3D/OpenGL)
// Example for D3D9 hook // Include required libraries #include <d3d9.h> #include <Windows.h> #include <kiero.hpp> // Create the type of function that we will hook using pfnEndScene = HRESULT(__stdcall*)(LPDIRECT3DDEVICE9); static pfnEndScene oEndScene = nullptr; // Declare the detour function static HRESULT __stdcall hk_EndScene(LPDIRECT3DDEVICE9 pDevice) { // static bool init = false; // if (!init) { // MessageBox(0, "Hello, World!", "Kiero", MB_OK); // init = true; // } return oEndScene(pDevice); } static DWORD WINAPI kieroExampleThread(LPVOID) { // Explicitly initialize for D3D9, "RenderType::Auto" can also be used if (kiero::init(kiero::RenderType::D3D9) != kiero::Status::Success) { return S_FALSE; } // Using kiero::bind to hook EndScene kiero::Status status = kiero::bind<&IDirect3DDevice9::EndScene>(&oEndScene, &hk_EndScene); if (status == kiero::Status::Success) { std::println("Successfully hooked IDirect3DDevice9::EndScene"); } // Alternatively, get the address of the function via kiero::getMethod. // By default, the return type is the same as the expected detour function type pfnEndScene endScene = kiero::getMethod<&IDirect3DDevice9::EndScene>(); // A template parameter can be used to specify the return type to anything // which can be bit_cast-ed from a uintptr_t uintptr_t endScene = kiero::getMethod<&IDirect3DDevice9::EndScene, uintptr_t>(); return S_OK; } BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpReserved) { if (fdwReason == DLL_PROCESS_ATTACH) { auto handle = CreateThread(nullptr, 0, &kieroExampleThread, nullptr, 0, nullptr); if (!handle) { return FALSE; } CloseHandle(handle); } return TRUE; }