# hudhook ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/veeenu/hudhook/lint.yml) [![GitHub Release](https://img.shields.io/github/v/release/veeenu/hudhook)](https://github.com/veeenu/hudhook/releases) [![Crates.io Version](https://img.shields.io/crates/v/hudhook)](https://crates.io/crates/hudhook) [![GitHub License](https://img.shields.io/github/license/veeenu/hudhook)](https://github.com/veeenu/hudhook/blob/main/LICENSE) [![Discord](https://img.shields.io/discord/267623298647457802)](https://discord.gg/CVHbN7eF) [![book](https://img.shields.io/badge/docs-book-brightgreen)](https://veeenu.github.io/hudhook) [![rustdoc](https://img.shields.io/badge/docs-rustdoc-brightgreen)](https://veeenu.github.io/hudhook/rustdoc/hudhook) [![Patreon](https://img.shields.io/badge/Support_me-Patreon-orange)](https://www.patreon.com/johndisandonato) A Rust renderer hook library for building [Dear ImGui](https://github.com/ocornut/imgui) overlays. Currently supports DirectX 9, DirectX 11, DirectX 12 and OpenGL 3. Runs on Windows and Wine/Proton. ![hello](tests/hello.jpg) ## Resources - [Tutorial book](https://veeenu.github.io/hudhook). - [API reference](https://veeenu.github.io/hudhook/rustdoc/hudhook). - [Architecture blog post](https://veeenu.github.io/blog/sekiro-practice-tool-architecture/) (a bit outdated). ## Supporting the project If you like `hudhook` and would like to support the project, you can do so via my [Patreon](https://www.patreon.com/johndisandonato). I'm glad the project works for you and I'm grateful for your support. Thank you! ## Example ```rust // 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!(ImguiDx9Hooks, MyRenderLoop); } { // Use this if hooking into a DirectX 11 application. use hudhook::hooks::dx11::ImguiDx11Hooks; hudhook!(ImguiDx11Hooks, MyRenderLoop); } { // Use this if hooking into a DirectX 12 application. use hudhook::hooks::dx12::ImguiDx12Hooks; hudhook!(ImguiDx12Hooks, MyRenderLoop); } { // Use this if hooking into an OpenGL 3 application. use hudhook::hooks::opengl3::ImguiOpenGl3Hooks; hudhook!(ImguiOpenGl3Hooks, MyRenderLoop); } ``` ```rust // 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(); } ```