From 575fcca5c4f38ad6d514f0be173afe0668002e54 Mon Sep 17 00:00:00 2001 From: LHY0125 <3364451258@qq.com> Date: Mon, 16 Mar 2026 20:15:10 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=8F=90=E5=8F=96UI=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=88=B0=E7=8B=AC=E7=AB=8B=E6=A8=A1=E5=9D=97=E5=B9=B6?= =?UTF-8?q?=E6=94=B9=E8=BF=9B=E6=8B=96=E6=8B=BD=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将列表、按钮等UI创建代码从main.c移至ui.c/ui.h - 添加Windows UIPI消息过滤以支持管理员模式下的文件拖拽 - 更新Makefile和构建脚本以包含新的UI模块 - 清理旧的备份注册表文件并更新README文档 --- Makefile | 7 +- README.md | 45 +++++++--- bin/PathEditor.exe | Bin 229528 -> 231902 bytes bin/records/backup_20260316_193937.reg | Bin 35938 -> 0 bytes bin/records/backup_20260316_194700.reg | Bin 35938 -> 0 bytes bin/records/backup_20260316_195033.reg | Bin 35938 -> 0 bytes bin/records/backup_20260316_195233.reg | Bin 35938 -> 0 bytes bin/records/backup_20260316_195238.reg | Bin 35938 -> 0 bytes bin/records/backup_20260316_195622.reg | Bin 35938 -> 0 bytes build_installer.bat | 15 ++++ include/ui.h | 15 ++++ src/main.c | 109 ++++++++----------------- src/ui.c | 87 ++++++++++++++++++++ 13 files changed, 193 insertions(+), 85 deletions(-) delete mode 100644 bin/records/backup_20260316_193937.reg delete mode 100644 bin/records/backup_20260316_194700.reg delete mode 100644 bin/records/backup_20260316_195033.reg delete mode 100644 bin/records/backup_20260316_195233.reg delete mode 100644 bin/records/backup_20260316_195238.reg delete mode 100644 bin/records/backup_20260316_195622.reg create mode 100644 build_installer.bat create mode 100644 include/ui.h create mode 100644 src/ui.c diff --git a/Makefile b/Makefile index 870ecc1..4b160c3 100644 --- a/Makefile +++ b/Makefile @@ -18,9 +18,9 @@ CFLAGS = -Wall -O2 -I$(INCLUDE_DIR) -I$(LOCAL_INCLUDE_DIR) -D_WIN32 -DUNICODE -D LDFLAGS = -L$(LIB_DIR) -liup -liupcd -lgdi32 -lcomdlg32 -lcomctl32 -luuid -lole32 -ladvapi32 -mwindows # Source -SRC = src/main.c src/utils.c src/registry.c src/callbacks.c +SRC = src/main.c src/utils.c src/registry.c src/callbacks.c src/ui.c RES = ico/resources.rc -OBJ = $(OBJ_DIR)/main.o $(OBJ_DIR)/utils.o $(OBJ_DIR)/registry.o $(OBJ_DIR)/callbacks.o $(OBJ_DIR)/resources.o +OBJ = $(OBJ_DIR)/main.o $(OBJ_DIR)/utils.o $(OBJ_DIR)/registry.o $(OBJ_DIR)/callbacks.o $(OBJ_DIR)/ui.o $(OBJ_DIR)/resources.o EXE = $(BIN_DIR)/PathEditor.exe all: $(BIN_DIR) $(OBJ_DIR) $(EXE) @@ -46,6 +46,9 @@ $(OBJ_DIR)/registry.o: src/registry.c $(OBJ_DIR)/callbacks.o: src/callbacks.c $(CC) $(CFLAGS) -c -o $@ $< +$(OBJ_DIR)/ui.o: src/ui.c + $(CC) $(CFLAGS) -c -o $@ $< + $(OBJ_DIR)/resources.o: ico/resources.rc $(WINDRES) -i $< -o $@ diff --git a/README.md b/README.md index 48e8c1a..f97f6f9 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,36 @@ # Path Editor (系统环境变量编辑器) -一个简单、轻量级的 Windows 系统环境变量(PATH)编辑器,基于 C 语言和 IUP 图形库开发。 +一个简单、轻量级但功能强大的 Windows 系统环境变量(PATH)编辑器,基于 C 语言和 IUP 图形库开发。 ## ✨ 功能特点 -* **可视化编辑**:直观地查看和管理系统 PATH 环境变量。 -* **安全操作**:必须以管理员身份运行才能保存更改,防止误操作。 +* **🛡️ 安全第一**: + * **自动备份**:每次保存前自动备份注册表,防止意外。 + * **只读模式**:非管理员运行时自动切换到只读模式,防止误操作。 + * **权限检测**:智能检测当前运行权限。 + +* **📑 双视图管理**: + * 完美支持 **System (系统变量)** 和 **User (用户变量)** 的分离查看与编辑。 + * 清晰的 Tab 标签页切换。 + +* **🔴 智能诊断与维护**: + * **无效路径高亮**:自动检测路径是否存在,不存在的显示为红色。 + * **重复路径高亮**:自动检测重复项,重复的显示为橙色。 + * **一键清理**:智能移除所有无效和重复的路径,保持环境整洁。 + +* **📂 高效交互**: + * **拖拽支持**:直接将文件夹拖入窗口即可添加(支持管理员模式下的 UIPI 穿透)。 + * **实时搜索**:顶部搜索框支持不区分大小写的实时过滤查找。 + * **快捷键**:支持 Delete 键快速删除选中项。 + * **便捷管理**: * ➕ **新建**:添加新路径到列表。 * 📂 **浏览**:直接从文件资源管理器选择目录添加。 - * ✏️ **编辑**:修改现有路径。 + * ✏️ **编辑**:双击或点击按钮修改现有路径。 * 🗑️ **删除**:移除不需要的路径。 * ⬆️⬇️ **排序**:上移/下移调整路径优先级。 -* **轻量级**:原生 C 语言编写,运行速度快,占用资源少。 + +* **轻量级**:原生 C 语言编写,无臃肿依赖,运行速度极快。 ## 📦 下载与安装 @@ -30,6 +48,7 @@ * GCC 编译器 (推荐 MinGW-w64) * Make 工具 * IUP 库 (已包含在 `libs` 目录下) +* Inno Setup 6 (仅打包需要) ### 编译步骤 @@ -54,16 +73,22 @@ 本项目使用 Inno Setup 生成安装包。 1. 确保已安装 [Inno Setup 6](https://jrsoftware.org/isdl.php)。 -2. 编译项目生成 exe 文件。 -3. 使用 Inno Setup 编译 `dist/installer.iss` 脚本。 +2. 运行根目录下的 `build_installer.bat` 脚本。 +3. 生成的安装包将位于 `dist/dist/PathEditorSetup.exe`。 ## 📝 使用说明 1. **启动**:右键点击程序图标,选择“以管理员身份运行”。 2. **查看**:程序启动后会自动加载当前的系统 PATH 变量。 -3. **修改**:使用右侧按钮栏进行添加、删除、移动等操作。 -4. **保存**:操作完成后,务必点击底部的【确定】按钮保存更改。 -5. **生效**:保存后,某些正在运行的程序可能需要重启才能识别新的环境变量。CMD 或 PowerShell 窗口需要重新打开。 + * **红色**条目表示路径不存在。 + * **橙色**条目表示路径重复。 +3. **搜索**:在顶部输入关键词可快速筛选。 +4. **修改**: + * 拖拽文件夹到列表可直接添加。 + * 使用右侧按钮栏进行常规操作。 + * 点击“一键清理”可自动删除无效和重复项。 +5. **保存**:操作完成后,务必点击底部的【确定】按钮保存更改。 +6. **生效**:保存后,某些正在运行的程序可能需要重启才能识别新的环境变量。CMD 或 PowerShell 窗口需要重新打开。 ## 👤 作者信息 diff --git a/bin/PathEditor.exe b/bin/PathEditor.exe index da6756031d54c84d4c368fbd22c948fdbf7de2d8..0bce9f1892f6d6cc9520ba9d101662a4a4ccfc86 100644 GIT binary patch delta 31893 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 cV;B|>>R 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 F-vB`d%q0K- diff --git a/bin/records/backup_20260316_193937.reg b/bin/records/backup_20260316_193937.reg deleted file mode 100644 index 02da0a979c5e8247d37cbbcf4305f4a35da170b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35938 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 TF6v!g@v^i~>X=f&Bv1bzxWZp{ diff --git a/bin/records/backup_20260316_194700.reg b/bin/records/backup_20260316_194700.reg deleted file mode 100644 index 02da0a979c5e8247d37cbbcf4305f4a35da170b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35938 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 TF6v!g@v^i~>X=f&Bv1bzxWZp{ diff --git a/bin/records/backup_20260316_195033.reg b/bin/records/backup_20260316_195033.reg deleted file mode 100644 index 02da0a979c5e8247d37cbbcf4305f4a35da170b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35938 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 TF6v!g@v^i~>X=f&Bv1bzxWZp{ diff --git a/bin/records/backup_20260316_195233.reg b/bin/records/backup_20260316_195233.reg deleted file mode 100644 index 02da0a979c5e8247d37cbbcf4305f4a35da170b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35938 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 TF6v!g@v^i~>X=f&Bv1bzxWZp{ diff --git a/bin/records/backup_20260316_195238.reg b/bin/records/backup_20260316_195238.reg deleted file mode 100644 index 02da0a979c5e8247d37cbbcf4305f4a35da170b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35938 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 TF6v!g@v^i~>X=f&Bv1bzxWZp{ diff --git a/bin/records/backup_20260316_195622.reg b/bin/records/backup_20260316_195622.reg deleted file mode 100644 index 02da0a979c5e8247d37cbbcf4305f4a35da170b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35938 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 TF6v!g@v^i~>X=f&Bv1bzxWZp{ diff --git a/build_installer.bat b/build_installer.bat new file mode 100644 index 0000000..240ea14 --- /dev/null +++ b/build_installer.bat @@ -0,0 +1,15 @@ +@echo off +echo Copying DLLs... +if not exist bin mkdir bin +copy /Y "libs\iup-3.31_Win64_dllw6_lib\*.dll" bin\ + +echo Building Installer... +"D:\Program Files (x86)\Inno Setup 6\ISCC.exe" "dist\installer.iss" + +if %ERRORLEVEL% NEQ 0 ( + echo Installer build failed! + exit /b %ERRORLEVEL% +) + +echo Done! Installer is in dist\dist\ +pause \ No newline at end of file diff --git a/include/ui.h b/include/ui.h new file mode 100644 index 0000000..e894714 --- /dev/null +++ b/include/ui.h @@ -0,0 +1,15 @@ +#ifndef UI_H +#define UI_H + +#include + +// 创建列表控件 +Ihandle *create_path_list(); + +// 创建右侧功能按钮区域 +Ihandle *create_main_buttons(); + +// 创建底部按钮区域 +Ihandle *create_bottom_buttons(); + +#endif // UI_H \ No newline at end of file diff --git a/src/main.c b/src/main.c index fa1afbf..b72ff57 100644 --- a/src/main.c +++ b/src/main.c @@ -7,33 +7,27 @@ #include "utils.h" #include "registry.h" #include "callbacks.h" +#include "ui.h" + +// 定义 Windows 消息常量 +#ifndef WM_COPYGLOBALDATA +#define WM_COPYGLOBALDATA 0x0049 +#endif + +#ifndef MSGFLT_ADD +#define MSGFLT_ADD 1 +#endif // 全局变量定义 StringList raw_sys_paths = {0}; StringList raw_user_paths = {0}; // 全局控件定义 -Ihandle *dlg, *tabs_main, *list_sys, *list_user, *lbl_status; // 主窗口、标签页、系统路径列表、用户路径列表、状态标签 +Ihandle *dlg, *tabs_main, *list_sys, *list_user, *lbl_status; // 主窗口、标签页、系统路径列表、用户路径列表、状态标签 Ihandle *btn_new, *btn_edit, *btn_browse, *btn_del, *btn_up, *btn_down; // 右侧按钮 -Ihandle *btn_ok, *btn_cancel, *btn_help; // 确认取消帮助按钮 -Ihandle *btn_clean; // 一键清理按钮 -Ihandle *txt_search; // 搜索框 - -// 辅助函数:创建列表控件 -Ihandle *create_path_list() -{ - Ihandle *list = IupFlatList(); - IupSetAttribute(list, "EXPAND", "YES"); - IupSetAttribute(list, "ITEMPADDING", "5x5"); - IupSetAttribute(list, "BACKCOLOR", "255 255 255"); - IupSetAttribute(list, "BORDER", "YES"); - IupSetAttribute(list, "CANFOCUS", "YES"); - IupSetAttribute(list, "HLINE", "NO"); - IupSetCallback(list, "DBLCLICK_CB", (Icallback)list_dblclick_cb); - IupSetCallback(list, "DROPFILES_CB", (Icallback)list_dropfiles_cb); - IupSetCallback(list, "K_ANY", (Icallback)list_k_any_cb); - return list; -} +Ihandle *btn_ok, *btn_cancel, *btn_help; // 确认取消帮助按钮 +Ihandle *btn_clean; // 一键清理按钮 +Ihandle *txt_search; // 搜索框 // 主函数 int main(int argc, char **argv) @@ -44,6 +38,24 @@ int main(int argc, char **argv) IupOpen(&argc, &argv); IupSetGlobal("UTF8MODE", "YES"); + // 在管理员模式下,解决无法拖拽文件到列表框的问题 (UIPI) + // 需要加载 User32.dll 获取 ChangeWindowMessageFilter 函数 + HMODULE hUser32 = LoadLibraryW(L"user32.dll"); + if (hUser32) + { + typedef BOOL(WINAPI * ChangeWindowMessageFilterProc)(UINT, DWORD); + ChangeWindowMessageFilterProc pChangeWindowMessageFilter = + (ChangeWindowMessageFilterProc)GetProcAddress(hUser32, "ChangeWindowMessageFilter"); + + if (pChangeWindowMessageFilter) + { + pChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD); + pChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD); + pChangeWindowMessageFilter(WM_COPYGLOBALDATA, MSGFLT_ADD); + } + FreeLibrary(hUser32); + } + // 创建两个列表控件 list_sys = create_path_list(); list_user = create_path_list(); @@ -63,42 +75,8 @@ int main(int argc, char **argv) IupSetAttribute(tabs_main, "TABTITLE1", "用户变量 (User)"); IupSetAttribute(tabs_main, "TABTYPE", "TOP"); - // 创建右侧按钮 - btn_new = IupButton("新建(N)", NULL); - btn_edit = IupButton("编辑(E)", NULL); - btn_browse = IupButton("浏览(B)...", NULL); - btn_del = IupButton("删除(D)", NULL); - btn_up = IupButton("上移(U)", NULL); - btn_down = IupButton("下移(O)", NULL); - btn_clean = IupButton("一键清理", NULL); - - // 设置按钮回调 - IupSetCallback(btn_new, "ACTION", (Icallback)btn_new_cb); - IupSetCallback(btn_edit, "ACTION", (Icallback)btn_edit_cb); - IupSetCallback(btn_browse, "ACTION", (Icallback)btn_browse_cb); - IupSetCallback(btn_del, "ACTION", (Icallback)btn_del_cb); - IupSetCallback(btn_up, "ACTION", (Icallback)btn_up_cb); - IupSetCallback(btn_down, "ACTION", (Icallback)btn_down_cb); - IupSetCallback(btn_clean, "ACTION", (Icallback)btn_clean_cb); - - // 设置按钮大小 (宽度和高度都增加约1/4) - IupSetAttribute(btn_new, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_edit, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_browse, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_del, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_up, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_down, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_clean, "RASTERSIZE", "100x32"); - - Ihandle *vbox_btns = IupVbox( - btn_new, btn_edit, btn_browse, btn_del, - IupFill(), // 间隔 - btn_clean, // 放在上移下移之前,或者最下面,这里放在中间偏下 - IupFill(), - btn_up, btn_down, - NULL); - IupSetAttribute(vbox_btns, "GAP", "5"); - IupSetAttribute(vbox_btns, "MARGIN", "0x0"); + // 创建右侧按钮区域 + Ihandle *vbox_btns = create_main_buttons(); // 上部布局:Tabs + 按钮 Ihandle *hbox_main = IupHbox(tabs_main, vbox_btns, NULL); @@ -109,23 +87,8 @@ int main(int argc, char **argv) lbl_status = IupLabel("状态: 就绪"); IupSetAttribute(lbl_status, "EXPAND", "HORIZONTAL"); - // 底部按钮 - btn_ok = IupButton("确定", NULL); - btn_cancel = IupButton("取消", NULL); - btn_help = IupButton("帮助(?)", NULL); - - IupSetCallback(btn_ok, "ACTION", (Icallback)btn_ok_cb); - IupSetCallback(btn_cancel, "ACTION", (Icallback)btn_cancel_cb); - IupSetCallback(btn_help, "ACTION", (Icallback)btn_help_cb); - - IupSetAttribute(btn_ok, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_cancel, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_help, "RASTERSIZE", "100x32"); - - Ihandle *hbox_bottom = IupHbox(lbl_status, IupFill(), btn_help, btn_ok, btn_cancel, NULL); - IupSetAttribute(hbox_bottom, "GAP", "10"); - IupSetAttribute(hbox_bottom, "MARGIN", "10x10"); - IupSetAttribute(hbox_bottom, "ALIGNMENT", "ACENTER"); + // 创建底部按钮区域 + Ihandle *hbox_bottom = create_bottom_buttons(); // 总体布局 Ihandle *vbox_all = IupVbox( diff --git a/src/ui.c b/src/ui.c new file mode 100644 index 0000000..ddfbe94 --- /dev/null +++ b/src/ui.c @@ -0,0 +1,87 @@ +#include "ui.h" +#include "globals.h" +#include "callbacks.h" +#include + +// 创建列表控件 +Ihandle *create_path_list() +{ + Ihandle *list = IupFlatList(); + IupSetAttribute(list, "EXPAND", "YES"); + IupSetAttribute(list, "ITEMPADDING", "5x5"); + IupSetAttribute(list, "BACKCOLOR", "255 255 255"); + IupSetAttribute(list, "BORDER", "YES"); + IupSetAttribute(list, "CANFOCUS", "YES"); + IupSetAttribute(list, "HLINE", "NO"); + IupSetCallback(list, "DBLCLICK_CB", (Icallback)list_dblclick_cb); + IupSetCallback(list, "DROPFILES_CB", (Icallback)list_dropfiles_cb); + IupSetCallback(list, "K_ANY", (Icallback)list_k_any_cb); + return list; +} + +// 创建右侧功能按钮区域 +Ihandle *create_main_buttons() +{ + // 创建右侧按钮 + btn_new = IupButton("新建(N)", NULL); + btn_edit = IupButton("编辑(E)", NULL); + btn_browse = IupButton("浏览(B)...", NULL); + btn_del = IupButton("删除(D)", NULL); + btn_up = IupButton("上移(U)", NULL); + btn_down = IupButton("下移(O)", NULL); + btn_clean = IupButton("一键清理", NULL); + + // 设置按钮回调 + IupSetCallback(btn_new, "ACTION", (Icallback)btn_new_cb); + IupSetCallback(btn_edit, "ACTION", (Icallback)btn_edit_cb); + IupSetCallback(btn_browse, "ACTION", (Icallback)btn_browse_cb); + IupSetCallback(btn_del, "ACTION", (Icallback)btn_del_cb); + IupSetCallback(btn_up, "ACTION", (Icallback)btn_up_cb); + IupSetCallback(btn_down, "ACTION", (Icallback)btn_down_cb); + IupSetCallback(btn_clean, "ACTION", (Icallback)btn_clean_cb); + + // 设置按钮大小 (宽度和高度都增加约1/4) + IupSetAttribute(btn_new, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_edit, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_browse, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_del, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_up, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_down, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_clean, "RASTERSIZE", "100x32"); + + Ihandle *vbox_btns = IupVbox( + btn_new, btn_edit, btn_browse, btn_del, + IupFill(), // 间隔 + btn_clean, // 放在上移下移之前,或者最下面,这里放在中间偏下 + IupFill(), + btn_up, btn_down, + NULL); + IupSetAttribute(vbox_btns, "GAP", "5"); + IupSetAttribute(vbox_btns, "MARGIN", "0x0"); + + return vbox_btns; +} + +// 创建底部按钮区域 +Ihandle *create_bottom_buttons() +{ + // 底部按钮 + btn_ok = IupButton("确定", NULL); + btn_cancel = IupButton("取消", NULL); + btn_help = IupButton("帮助(?)", NULL); + + IupSetCallback(btn_ok, "ACTION", (Icallback)btn_ok_cb); + IupSetCallback(btn_cancel, "ACTION", (Icallback)btn_cancel_cb); + IupSetCallback(btn_help, "ACTION", (Icallback)btn_help_cb); + + IupSetAttribute(btn_ok, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_cancel, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_help, "RASTERSIZE", "100x32"); + + Ihandle *hbox_bottom = IupHbox(lbl_status, IupFill(), btn_help, btn_ok, btn_cancel, NULL); + IupSetAttribute(hbox_bottom, "GAP", "10"); + IupSetAttribute(hbox_bottom, "MARGIN", "10x10"); + IupSetAttribute(hbox_bottom, "ALIGNMENT", "ACENTER"); + + return hbox_bottom; +} \ No newline at end of file