diff --git a/.gitignore b/.gitignore index 7d97e76..8151579 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /.trae/ /.vscode/ /build/ +/build*/ *.o *.obj diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..d66d1be --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,54 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## 项目概述 + +Path Editor 是一个 Windows 系统环境变量 PATH 编辑器,使用 C 语言和 IUP 图形库开发。通过读写注册表 `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path` 来管理系统 PATH。 + +## 构建与运行 + +```bash +# 编译(需要 MinGW-w64 在 PATH 中) +mingw32-make + +# 清理构建产物 +mingw32-make clean + +# 运行(必须以管理员身份) +bin/PathEditor.exe +``` + +编译器为 MinGW-w64 GCC,使用 `windres` 编译资源文件(图标)。IUP 3.31 库已包含在 `libs/` 目录下,无需额外安装。 + +## 打包 + +使用 Inno Setup 6 生成安装包。先编译生成 exe,再用 Inno Setup 编译 `dist/installer.iss`。 + +## 架构 + +``` +src/ + main.c 入口,构建 UI 布局(IupDialog + IupFlatList + 按钮) + callbacks.c 所有按钮回调 + 自定义输入对话框 + registry.c 注册表读写:load_path() / save_path() + utils.c 编码转换 + 管理员权限检测 + 斑马纹刷新 +include/ + globals.h 全局 Ihandle* 指针和注册表路径常量 + callbacks.h 回调函数声明 + registry.h 注册表操作声明 + utils.h 工具函数声明 +``` + +**数据流**: `load_path()`(注册表 → 列表) → 用户操作(按钮回调) → `save_path()`(列表 → 注册表 → `WM_SETTINGCHANGE` 广播) + +**编码约定**: IUP 使用 UTF-8,Windows 注册表 API 使用 UTF-16 (wide char)。`utils.c` 提供 `wide_to_utf8()` 和 `utf8_to_wide()` 完成转换。 + +**全局控件**: 所有 IUP 控件句柄(`dlg`, `list_path`, `lbl_status`, 各按钮)在 `main.c` 定义并通过 `globals.h` 声明为 `extern`,回调函数和工具函数直接访问它们。 + +## 关键约束 + +- 必须以管理员身份运行才能保存更改(`check_admin()` 通过尝试以 `KEY_WRITE` 打开注册表来检测) +- IUP 的 `UTF8MODE` 必须在 `IupOpen()` 之前通过 `putenv("IUP_UTF8MODE=YES")` 设置 +- `IupFlatList` 的数据操作(`APPEND` 等属性)必须在控件 Map 之后(`IupShowXY` 之后)才能生效 +- PATH 使用 `REG_EXPAND_SZ` 类型以支持 `%SystemRoot%` 等变量展开 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d738ade --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 3.15) +project(PathEditor LANGUAGES C) + +set(IUP_DIR "${CMAKE_SOURCE_DIR}/libs/iup-3.31_Win64_dllw6_lib") + +add_executable(PathEditor + src/main.c + src/utils.c + src/registry.c + src/callbacks.c + ico/resources.rc +) + +target_include_directories(PathEditor PRIVATE + ${IUP_DIR}/include + include +) + +target_link_directories(PathEditor PRIVATE ${IUP_DIR}) + +target_link_libraries(PathEditor + iup iupcd gdi32 comdlg32 comctl32 uuid ole32 advapi32 +) + +target_compile_definitions(PathEditor PRIVATE _WIN32 UNICODE _UNICODE) + +target_compile_options(PathEditor PRIVATE -Wall -O2 -fexec-charset=UTF-8) + +target_link_options(PathEditor PRIVATE -mwindows) + +set_target_properties(PathEditor PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin" +) diff --git a/README.md b/README.md index 48e8c1a..348746f 100644 --- a/README.md +++ b/README.md @@ -1,82 +1,123 @@ -# Path Editor (系统环境变量编辑器) +# Path Editor — Windows 系统环境变量编辑器 -一个简单、轻量级的 Windows 系统环境变量(PATH)编辑器,基于 C 语言和 IUP 图形库开发。 +一个轻量级的 Windows 系统环境变量(PATH)编辑器,使用 C 语言和 [IUP](https://www.tecgraf.puc-rio.br/iup/) 图形库开发。 -## ✨ 功能特点 +## 项目结构 -* **可视化编辑**:直观地查看和管理系统 PATH 环境变量。 -* **安全操作**:必须以管理员身份运行才能保存更改,防止误操作。 -* **便捷管理**: - * ➕ **新建**:添加新路径到列表。 - * 📂 **浏览**:直接从文件资源管理器选择目录添加。 - * ✏️ **编辑**:修改现有路径。 - * 🗑️ **删除**:移除不需要的路径。 - * ⬆️⬇️ **排序**:上移/下移调整路径优先级。 -* **轻量级**:原生 C 语言编写,运行速度快,占用资源少。 +``` +PathEditor/ +├── src/ +│ ├── main.c # 程序入口,构建 UI 布局 +│ ├── callbacks.c # 按钮回调 + 自定义输入对话框 +│ ├── registry.c # 注册表读写操作 +│ └── utils.c # 编码转换 + 权限检测 + 斑马纹样式 +├── include/ +│ ├── globals.h # 全局控件句柄与常量 +│ ├── callbacks.h +│ ├── registry.h +│ └── utils.h +├── libs/ # IUP 3.31 库文件(预编译) +├── ico/ # 应用图标与资源文件 +├── dist/ +│ └── installer.iss # Inno Setup 安装包脚本 +├── ManagePath.bat # 备用的命令行 PATH 管理脚本 +├── CMakeLists.txt # CMake 构建配置 +├── Makefile # GNU Make 构建配置(备用) +└── CLAUDE.md # Claude Code 项目指南 +``` -## 📦 下载与安装 +## 功能特点 -您可以从 [Releases](https://github.com/LHY0125/PathEditor/releases) 页面下载最新的安装包 (`PathEditorSetup.exe`)。 +- **可视化编辑** — 以列表形式直观查看和管理系统 PATH 变量 +- **增删改查** — 新建、编辑、删除条目,支持从文件管理器直接选择目录 +- **拖拽排序** — 上移/下移按钮调整路径优先级 +- **权限检测** — 非管理员模式自动切换为只读,防止误操作 +- **自定义输入框** — 支持超长路径的编辑(80 字符可见宽度) +- **斑马纹列表** — 交替行背景色,方便阅读 +- **双击编辑** — 双击列表项直接编辑对应路径 +- **即时广播** — 保存后通过 `WM_SETTINGCHANGE` 通知系统 -安装完成后,请**以管理员身份运行**程序以确保能够保存对系统环境变量的修改。 +## 工作原理 -## 🛠️ 构建指南 +程序直接读写 Windows 注册表键: -如果您想从源码构建本项目,请按照以下步骤操作: +``` +HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path +``` + +PATH 值使用 `REG_EXPAND_SZ` 类型,支持 `%SystemRoot%` 等环境变量展开。 + +**编码转换**:IUP 控件使用 UTF-8,Windows 注册表 API 使用 UTF-16,`utils.c` 提供 `wide_to_utf8()` 和 `utf8_to_wide()` 完成双向转换。 + +## 下载与安装 + +从 [Releases](https://github.com/LHY0125/PathEditor/releases) 页面下载 `PathEditorSetup.exe` 安装包。 + +> **注意:** 安装后必须以管理员身份运行,否则只能查看,无法保存更改。 + +## 从源码构建 ### 环境要求 -* Windows 操作系统 -* GCC 编译器 (推荐 MinGW-w64) -* Make 工具 -* IUP 库 (已包含在 `libs` 目录下) +| 工具 | 说明 | +|------|------| +| Windows 操作系统 | 需 Windows API 支持 | +| MinGW-w64 (GCC) | 编译器,路径 `D:\settings\Language\C\mingw64` | +| CMake 3.15+ | 构建工具 | +| IUP 3.31 | GUI 库(已包含在 `libs/` 中) | -### 编译步骤 +### 编译 -1. 克隆仓库: +```bash +git clone https://github.com/LHY0125/PathEditor.git +cd PathEditor - ```bash - git clone https://github.com/LHY0125/PathEditor.git - cd PathEditor - ``` +# 配置(MinGW Makefiles 生成器) +cmake -B build -G "MinGW Makefiles" -2. 编译项目: +# 编译 +cmake --build build +``` - ```bash - mingw32-make - ``` +编译产出在 `bin/PathEditor.exe`。 -3. 运行: - 编译成功后,可执行文件位于 `bin/PathEditor.exe`。 +**其他 CMake 选项:** -### 打包 (可选) +```bash +# Debug 模式(带调试符号) +cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug +cmake --build build -本项目使用 Inno Setup 生成安装包。 +# Release 优化 +cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release +cmake --build build +``` -1. 确保已安装 [Inno Setup 6](https://jrsoftware.org/isdl.php)。 -2. 编译项目生成 exe 文件。 -3. 使用 Inno Setup 编译 `dist/installer.iss` 脚本。 +### 打包安装程序 -## 📝 使用说明 +使用 [Inno Setup 6](https://jrsoftware.org/isdl.php) 生成 `.exe` 安装包: -1. **启动**:右键点击程序图标,选择“以管理员身份运行”。 -2. **查看**:程序启动后会自动加载当前的系统 PATH 变量。 -3. **修改**:使用右侧按钮栏进行添加、删除、移动等操作。 -4. **保存**:操作完成后,务必点击底部的【确定】按钮保存更改。 -5. **生效**:保存后,某些正在运行的程序可能需要重启才能识别新的环境变量。CMD 或 PowerShell 窗口需要重新打开。 +1. 确保已安装 Inno Setup 6 +2. 先编译项目生成 `bin/PathEditor.exe` 及所需 DLL +3. 用 Inno Setup 编译 `dist/installer.iss` +4. 安装包输出至 `dist/dist/PathEditorSetup.exe` -## 👤 作者信息 +## 使用说明 -* **作者**:LHY -* **邮箱**:<3364451258@qq.com> -* **GitHub**:[https://github.com/LHY0125/PathEditor](https://github.com/LHY0125/PathEditor) +1. **启动** — 右键程序图标,选择「以管理员身份运行」 +2. **查看** — 程序启动后自动加载当前系统 PATH 到列表 +3. **新建** — 点击「新建」按钮,输入路径后确认,新条目追加到列表末尾 +4. **编辑** — 选中条目后点击「编辑」,或直接双击条目 +5. **浏览** — 点击「浏览」打开文件夹选择器,选中目录后自动添加 +6. **删除** — 选中条目后点击「删除」 +7. **排序** — 选中条目后点击「上移」或「下移」调整顺序 +8. **保存** — 操作完成后点击「确定」写入注册表并广播变更 +9. **生效** — CMD / PowerShell 窗口需要重新打开才能识别新变量;部分程序可能需要重启 -如果您觉得这个工具对您有帮助,请给我的 GitHub 仓库点个 Star ⭐️! +**命令行备选方案:** 项目附带 `ManagePath.bat` 脚本,提供导出、导入和备份 PATH 的功能,无需 GUI 也可操作。 -## 📄 许可证 +## 许可证 -本项目基于 MIT 许可证开源,您可以在遵守许可证条款的前提下自由使用、修改和分发本项目的代码。 +本项目基于 [MIT License](LICENSE) 开源。 -详细信息请参阅 [LICENSE](LICENSE) 文件。 - -Copyright © 2026 LHY. All Rights Reserved. +Copyright (c) 2026 LHY diff --git a/bin/PathEditor.exe b/bin/PathEditor.exe index 68d21bf..011da74 100644 Binary files a/bin/PathEditor.exe and b/bin/PathEditor.exe differ