尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AutoClicker配置持久化与日志机制详解:System.Text.Json与Serilog完整实现走读

AutoClicker配置持久化与日志机制详解:System.Text.Json与Serilog完整实现走读 AutoClicker配置持久化与日志机制详解System.Text.Json与Serilog完整实现走读【免费下载链接】AutoClickerAutoClicker is a useful simple tool for automating mouse clicks.项目地址: https://gitcode.com/gh_mirrors/au/AutoClickerAutoClicker 是一款 Windows 上的鼠标点击自动化工具用它可以让鼠标按设定间隔自动单击、双击或拖动。它最贴心的设计之一是配置持久化你设置的快捷键、点击间隔、点击位置会自动保存为 JSON 文件而每一次启动、注册热键、开始/停止点击都会通过Serilog 日志框架写入日志文件。本文带你完整走读这套基于System.Text.Json与Serilog的实现帮你快速看懂配置存到哪了、日志怎么查。 先搞清楚配置文件和日志放在哪里很多用户找不到 AutoClicker 的设置存在哪里。答案集中在一个常量文件里配置文件%APPDATA%\AutoClicker\AutoClicker_Settings.json在 Windows 中通常是C:\Users\你的用户名\AppData\Roaming\AutoClicker\日志文件%APPDATA%\AutoClicker\AutoClicker_Logs.txt这两个路径在 Constants.cs 中定义public const string SETTINGS_FILE_PATH AutoClicker_Settings.json; public const string LOG_FILE_PATH AutoClicker_Logs.txt;在 SettingsUtils.cs 中程序用Environment.SpecialFolder.ApplicationData即%APPDATA%目录拼接出最终路径。为什么选 %APPDATA%因为它是 Windows 标准的按用户存储应用数据的位置每个用户独立多用户互不干扰不需要管理员权限就能写入程序文件目录往往需要管理员权限卸载程序时不会被误删 配置模型三层结构承载所有设置AutoClicker 把所有设置组织成一个树状结构入口类是 ApplicationSettings.cs模型类职责持久化字段举例ApplicationSettings总入口聚合下面两组设置—HotkeySettings开始/停止/切换 3 个全局热键StartHotkey、StopHotkey、ToggleHotkeyAutoClickerSettings点击行为本身间隔时分秒毫秒、鼠标按键、单双击、重复模式、坐标默认快捷键是F5 开始、F6 停止、F7 切换定义在 HotkeySettings.cs 中并通过 KeyMappingUtils 从内置的 keyMappings.json 资源中解析出按键映射。一个细节亮点在 KeyMapping.cs它使用[JsonPropertyName]特性把 C# 的 PascalCase 属性名映射成 JSON 里的 snake_case 字段名如display_name、virtual_key_hex_code让配置文件对阅读者更友好。而且VirtualKeyHexCode的 setter 里会自动把十六进制字符串如0x75转成 Windows API 需要的整数虚拟键码——反序列化时一次赋值两种表示都齐了这是 System.Text.Json 里很值得学习的技巧。 持久化核心JsonUtils 的读写封装所有 JSON 读写都收口在一个静态工具类 JsonUtils.cs只有两个方法1. 读取ReadJsonTL9-L32执行流程是四步防御式设计文件不存在 → 打一条Warning日志返回default即 null不崩溃文件存在 →File.ReadAllText读取后用JsonSerializer.DeserializeT反序列化JSON 格式损坏抛JsonException→ 记录Error日志后重新抛出让调用方知晓成功 → 打Debug日志返回结果。2. 写入WriteJsonTL34-L46JsonSerializerOptions options new JsonSerializerOptions { WriteIndented true }; string jsonString JsonSerializer.Serialize(data, options);关键就一个选项WriteIndented true格式化输出。这意味着配置 JSON 是人类可读的——你可以直接用记事本打开AutoClicker_Settings.json查看甚至手工修改注意先关闭程序避免被覆盖。为什么选 System.Text.Json 而不是 Newtonsoft.Json它是 .NET 内置的高性能序列化库依赖更少。本项目在 packages.config 中引用的是System.Text.Json 5.0.2因为目标框架是 .NET Framework 4.8需要通过 NuGet 补齐该库。 保存与加载的完整生命周期真正的编排逻辑在 SettingsUtils.cs它用静态属性 静态构造函数保证整个应用只有一份设置实例应用启动 └─ 静态构造函数触发每次进程启动仅一次 ├─ 初始化 Serilog 日志见下一节 └─ LoadSettingsFromFile() ← 读 JSONnull 则用默认值 ↓ 用户修改设置改热键 / 点设置窗口保存 ├─ SetStartHotKey / SetStopHotKey / SetToggleHotKey │ └─ 修改内存对象 → 触发 HotKeyChangedEvent → SaveSettingsToFile() └─ SetApplicationSettings()[L87-L104](https://link.gitcode.com/i/e02145a9b8072da43296929ff3f99408) └─ 逐项拷贝 UI 设置到内存对象 → SaveSettingsToFile() ↓ SaveSettingsToFile() → JsonUtils.WriteJson() → 落盘到 %APPDATA%几个值得注意的设计点事件驱动联动改热键时不仅保存还会触发HotKeyChangedEvent事件L67主窗口 MainWindow.xaml.cs 收到后重新向 Windows 注册热键实现保存即生效一键重置Reset()L48-L53会把开始/停止热键还原为 F5/F6 默认值并自动落盘首次运行的兜底LoadSettingsFromFileL74-L85发现文件不存在时不会报错而是new ApplicationSettings()生成一份全新默认设置——所以你第一次运行永远能正常看到主界面。 日志机制Serilog 控制台 文件双通道日志的初始化藏在 SettingsUtils 的静态构造函数 里全部 6 行Log.Logger new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File(logFilePath) .CreateLogger();配置项作用MinimumLevel.Debug()最低级别设为 Debug即全量记录Debug Information Warning ErrorWriteTo.Console()输出到控制台方便调试时在 VS 输出窗口看到WriteTo.File(logFilePath)同步写入%APPDATA%\AutoClicker\AutoClicker_Logs.txt这三个 Sink 来自 packages.config 中的三个 NuGet 包Serilog 2.10.0、Serilog.Sinks.Console 4.0.0、Serilog.Sinks.File 5.0.0——核心库 需要的 Sink 按需组合正是 Serilog 模块化设计哲学的体现。日志都记录了什么项目里Log.Information / Debug / Warning / Error覆盖了一条清晰的用户旅程启动Logger initialized successfullySettingsUtils.cs#L26热键管理RegisterHotkey with hotkeyId...、UnregisterHotkey...MainWindow.xaml.cs#L307-L316注册失败会打 Warning点击任务Starting operation, interval150ms/Stopping operationMainWindow.xaml.cs#L121-L139坐标捕捉窗口检测到的屏幕数量、捕捉到的鼠标坐标CaptureMouseScreenCoordinatesWindow.xaml.cs#L37-L87退出Application closingMainWindow.xaml.cs#L108所有日志都使用 Serilog 的结构化占位符语法{FilePath}、{HotkeyId}而不是字符串拼接既安全无注入/拼接错误风险又便于后续检索分析。 实战新手常见问题解答Q1我想恢复默认设置怎么办设置窗口中有重置按钮它会调用Reset()把热键还原为 F5/F6。如果想完全重来直接删除%APPDATA%\AutoClicker\AutoClicker_Settings.json即可下次启动自动重建默认配置。Q2热键不生效去哪排查打开AutoClicker_Logs.txt搜索RegisterHotkey或UnregisterHotkey。若看到Warning: No hotkey registered on 9000说明 Windows 热键注册失败通常是 F5/F6/F7 被其他软件占用换一个键再保存即可。Q3日志文件会无限增长吗当前实现是简单追加写入。如果你长期运行且任务频繁日志会持续变大可以定期手动清理该文件——它只是辅助排查工具删除不影响任何功能。Q4可以手工编辑配置文件吗可以。文件是格式化 JSON关闭程序后用记事本编辑AutoClicker_Settings.json注意保持virtual_key_hex_code为十六进制字符串如0x75重新打开程序即可加载。✅ 总结AutoClicker 用一个约 150 行的小型代码库展示了桌面应用持久化与日志的完整最小实践System.Text.Json负责序列化WriteIndented保证可读性JsonPropertyName美化字段名%APPDATA% JSON 文件作为持久化载体无权限问题、跨用户独立、可手工维护Serilog 双 SinkConsole File让开发者调试与用户排查共用一套日志静态构造函数 单例设置对象 事件通知把加载 → 修改 → 落盘 → 生效串成自动化闭环。这套模式简单、稳健、无第三方数据库依赖非常适合作为中小型 WPF/WinForms 工具的参考模板。【免费下载链接】AutoClickerAutoClicker is a useful simple tool for automating mouse clicks.项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表