# npipe **Repository Path**: batcom/npipe ## Basic Information - **Project Name**: npipe - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-29 - **Last Updated**: 2026-01-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WindowController 项目 这是一个Windows窗口控制项目,包含以下组件: - 主应用程序 (WindowControllerApp) - DLL注入器 (InjectorImGui) - 窗口控制DLL (WindowControllerDLL) ## 依赖库 本项目使用vcpkg管理以下依赖库: 1. **spdlog** - 快速的C++日志库 2. **nlohmann::json** - 现代C++ JSON库 ## 构建说明 ### 前提条件 - Visual Studio 2019 或更高版本 - CMake 3.15 或更高版本 - vcpkg 包管理器 ### 安装依赖库 ```bash vcpkg install spdlog nlohmann-json ``` ### 构建项目 ```bash # 创建build目录 mkdir build cd build # 配置项目(请替换为你的vcpkg安装路径) cmake .. -DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake ## 示例 cmake .. -DCMAKE_TOOLCHAIN_FILE=E:/git/vcpkg/scripts/buildsystems/vcpkg.cmake # 构建项目 cmake --build . --config Release ``` ## 测试依赖库集成 项目包含一个测试程序 TestLogging.exe 来验证库的集成: ```bash # 创建日志目录 mkdir build\bin\Release\logs # 运行测试程序 cd build\bin\Release .\TestLogging.exe ``` 程序会生成以下文件: - `logs/test.log` - spdlog文件日志输出 - `logs/example.json` - nlohmann::json序列化输出 ## 使用spdlog ```cpp #include // 基本日志记录 spdlog::info("Hello, {}!", "World"); spdlog::warn("Warning message"); spdlog::error("Error message"); // 格式化日志 spdlog::info("Support for int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}", 42); ``` ## 使用nlohmann::json ```cpp #include using json = nlohmann::json; // 创建JSON对象 json j; j["pi"] = 3.14159; j["happy"] = true; j["name"] = "Niels"; // 序列化 std::string s = j.dump(4); // 解析JSON auto parsed = json::parse(R"({"happy": true, "pi": 3.141})"); ``` ## 项目结构 ``` ├── src/ │ ├── app/ # 主应用程序源码 │ ├── app_imgui/ # ImGui注入器源码 │ ├── dll/ # DLL源码 │ └── include/ # 头文件 ├── third_party/ │ └── imgui/ # ImGui库源码 ├── build/ # 构建目录 └── CMakeLists.txt # 主CMake配置文件 ``` ## ImGui 应用程序模板使用说明 项目提供了一个通用的 ImGui 应用程序模板,用于快速创建新的 ImGui UI 应用。 ### 模板文件 - [ImGuiAppTemplate.h](src/include/ImGuiAppTemplate.h) - 模板类接口定义 - [ImGuiAppTemplate.cpp](src/common/ImGuiAppTemplate.cpp) - 模板类实现 - [laragon.cpp](src/sync/laragon.cpp) - 模板使用示例 ### 创建新应用程序的步骤 1. **继承模板类**:创建一个新的类继承自 [ImGuiAppTemplate](src/include/ImGuiAppTemplate.h) ```cpp #include "../include/ImGuiAppTemplate.h" class MyApp : public ImGuiAppTemplate { public: MyApp() {} virtual ~MyApp() {} protected: virtual void OnInit() override { // 初始化逻辑 } virtual void OnRender() override { // UI 渲染逻辑 ImGui::Begin("My App"); ImGui::Text("Hello, World!"); ImGui::End(); } virtual void OnUpdate(float deltaTime) override { // 更新逻辑 } virtual void OnCleanup() override { // 清理资源 } }; ``` 2. **实现主函数**:在主函数中创建并运行应用程序 ```cpp int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MyApp app; if (!app.Initialize(hInstance, L"My Application", 1280, 800)) { return -1; } int result = app.Run(); app.Cleanup(); return result; } ``` 3. **更新 CMakeLists.txt**:添加新应用程序到构建系统 ```cmake add_executable(MyApp myapp.cpp ../common/GlobalLogger.cpp ${IMGUI_SOURCES} ) target_compile_definitions(MyApp PRIVATE ${COMMON_COMPILE_DEFINITIONS} ) target_include_directories(MyApp PRIVATE ${COMMON_INCLUDE_DIRS} ) target_link_libraries(MyApp ${COMMON_LINK_LIBS} ) set_target_properties(MyApp PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${COMMON_OUTPUT_DIR} WIN32_EXECUTABLE TRUE ) ``` ### 模板功能 [ImGuiAppTemplate](src/include/ImGuiAppTemplate.h) 类提供了以下功能: - DirectX 11 渲染后端 - ImGui 框架集成 - Windows 消息处理 - DLL 注入/卸载功能 ([DLLInjector](src/include/ImGuiAppTemplate.h#L75-L85) 类) - 进程和模块枚举功能 - 工具函数(字符串转换、状态设置等) ### CMake 变量定义 项目中的 ImGui 源文件现在使用变量形式定义,便于重用: ```cmake set(IMGUI_SOURCES ${ROOT_DIR}/third_party/imgui/imgui.cpp ${ROOT_DIR}/third_party/imgui/imgui_demo.cpp ${ROOT_DIR}/third_party/imgui/imgui_draw.cpp ${ROOT_DIR}/third_party/imgui/imgui_tables.cpp ${ROOT_DIR}/third_party/imgui/imgui_widgets.cpp ${ROOT_DIR}/third_party/imgui/backends/imgui_impl_win32.cpp ${ROOT_DIR}/third_party/imgui/backends/imgui_impl_dx11.cpp ) ```