A render loop hook library with Dear ImGui overlays, largely inspired by CheatEngine.
Currently supports DirectX 9, DirectX 11, DirectX 12 and OpenGL 3.
Read the tutorial book here.
Read the API reference here.
Read up on the underlying architecture here.
// src/lib.rs
use hudhook::*;
pub struct MyRenderLoop;
impl ImguiRenderLoop for MyRenderLoop {
fn render(&mut self, ui: &mut imgui::Ui) {
ui.window("My first render loop")
.position([0., 0.], imgui::Condition::FirstUseEver)
.size([320., 200.], imgui::Condition::FirstUseEver)
.build(|| {
ui.text("Hello, hello!");
});
}
}
{
// Use this if hooking into a DirectX 9 application.
use hudhook::hooks::dx9::ImguiDx9Hooks;
hudhook!(MyRenderLoop.into_hook::<ImguiDx9Hooks>());
}
{
// Use this if hooking into a DirectX 11 application.
use hudhook::hooks::dx11::ImguiDx11Hooks;
hudhook!(MyRenderLoop.into_hook::<ImguiDx11Hooks>());
}
{
// Use this if hooking into a DirectX 12 application.
use hudhook::hooks::dx12::ImguiDx12Hooks;
hudhook!(MyRenderLoop.into_hook::<ImguiDx12Hooks>());
}
{
// Use this if hooking into an OpenGL 3 application.
use hudhook::hooks::opengl3::ImguiOpenGl3Hooks;
hudhook!(MyRenderLoop.into_hook::<ImguiOpenGl3Hooks>());
}
// src/main.rs
use hudhook::inject::Process;
fn main() {
let mut cur_exe = std::env::current_exe().unwrap();
cur_exe.push("..");
cur_exe.push("libmyhook.dll");
let cur_dll = cur_exe.canonicalize().unwrap();
Process::by_name("MyTargetApplication.exe").unwrap().inject(cur_dll).unwrap();
}