mirror of
https://github.com/LHY0125/PathEditor.git
synced 2026-06-29 18:15:55 +08:00
feat: 重写为 Tauri + React + TypeScript (v4.0)
完全移除旧 C+IUP 代码,改用 Tauri 2.x + React 19 + TypeScript + Rust 技术栈重写。 功能与 v3.1 完全等价: - React 前端:Tailwind CSS 4、Zustand 状态管理、i18next 国际化 - Rust 后端:winreg 注册表读写、Win32 API FFI 调用 - 核心逻辑:StringList、UndoRedoManager、PathManager、Import/Export - 深色模式、中英文切换、键盘快捷键、合并预览 - 66 个 Vitest 单元测试 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
use winreg::enums::*;
|
||||
use winreg::RegKey;
|
||||
|
||||
const SYS_REG_PATH: &str = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
|
||||
const USER_REG_PATH: &str = "Environment";
|
||||
const PATH_VALUE: &str = "Path";
|
||||
|
||||
/// 从注册表加载系统 PATH
|
||||
#[tauri::command]
|
||||
pub fn load_system_paths() -> Result<Vec<String>, String> {
|
||||
let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
|
||||
let env_key = hklm
|
||||
.open_subkey_with_flags(SYS_REG_PATH, KEY_READ)
|
||||
.map_err(|e| format!("无法打开系统注册表项: {}", e))?;
|
||||
|
||||
let value: String = env_key
|
||||
.get_value(PATH_VALUE)
|
||||
.map_err(|e| format!("无法读取系统 PATH: {}", e))?;
|
||||
|
||||
Ok(split_path(&value))
|
||||
}
|
||||
|
||||
/// 从注册表加载用户 PATH
|
||||
#[tauri::command]
|
||||
pub fn load_user_paths() -> Result<Vec<String>, String> {
|
||||
let hkcu = RegKey::predef(HKEY_CURRENT_USER);
|
||||
let env_key = hkcu
|
||||
.open_subkey_with_flags(USER_REG_PATH, KEY_READ)
|
||||
.map_err(|e| format!("无法打开用户注册表项: {}", e))?;
|
||||
|
||||
let value: String = env_key
|
||||
.get_value(PATH_VALUE)
|
||||
.map_err(|e| format!("无法读取用户 PATH: {}", e))?;
|
||||
|
||||
Ok(split_path(&value))
|
||||
}
|
||||
|
||||
/// 保存系统 PATH 到注册表
|
||||
#[tauri::command]
|
||||
pub fn save_system_paths(paths: Vec<String>) -> Result<(), String> {
|
||||
let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
|
||||
let env_key = hklm
|
||||
.open_subkey_with_flags(SYS_REG_PATH, KEY_WRITE)
|
||||
.map_err(|e| format!("无法写入系统注册表(需要管理员权限): {}", e))?;
|
||||
|
||||
let value = join_path(&paths);
|
||||
env_key
|
||||
.set_value(PATH_VALUE, &value)
|
||||
.map_err(|e| format!("无法写入系统 PATH: {}", e))?;
|
||||
|
||||
log::info!("已保存系统 PATH,{} 个条目", paths.len());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// 保存用户 PATH 到注册表
|
||||
#[tauri::command]
|
||||
pub fn save_user_paths(paths: Vec<String>) -> Result<(), String> {
|
||||
let hkcu = RegKey::predef(HKEY_CURRENT_USER);
|
||||
let env_key = hkcu
|
||||
.open_subkey_with_flags(USER_REG_PATH, KEY_WRITE)
|
||||
.map_err(|e| format!("无法写入用户注册表: {}", e))?;
|
||||
|
||||
let value = join_path(&paths);
|
||||
env_key
|
||||
.set_value(PATH_VALUE, &value)
|
||||
.map_err(|e| format!("无法写入用户 PATH: {}", e))?;
|
||||
|
||||
log::info!("已保存用户 PATH,{} 个条目", paths.len());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// 用分号分割 PATH 字符串
|
||||
fn split_path(raw: &str) -> Vec<String> {
|
||||
raw.split(';')
|
||||
.map(|s| s.trim().to_string())
|
||||
.filter(|s| !s.is_empty())
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// 用分号连接路径列表
|
||||
fn join_path(paths: &[String]) -> String {
|
||||
paths.join(";")
|
||||
}
|
||||
Reference in New Issue
Block a user