从源码到界面:Tai项目架构设计全解析
【免费下载链接】Tai 👻 在Windows上统计软件使用时长和网站浏览时长 项目地址: https://gitcode.com/GitHub_Trending/ta/Tai
Tai项目是一款在Windows上统计软件使用时长和网站浏览时长的工具,通过精巧的架构设计实现了从系统监控到数据展示的完整流程。本文将深入剖析其代码组织结构、核心功能模块及界面交互设计,帮助开发者全面理解项目实现原理。
项目整体架构
Tai采用分层架构设计,主要包含核心功能层、数据访问层、界面展示层和扩展组件四大部分。解决方案文件Tai.sln定义了四个主要项目:Core(核心功能)、UI(用户界面)、TaiBug(调试工具)和Updater(更新组件),这种模块化划分确保了各功能单元的低耦合和高内聚。
架构分层概览
核心模块路径:
- 核心服务源码:Core/Servicers/Instances/
- 界面组件源码:UI/Controls/
- 数据模型定义:Core/Models/
- Web扩展实现:WebExtensions/Chrome/
核心功能模块解析
应用状态管理
应用状态管理是Tai的核心功能之一,通过AppState.cs类实现全局状态跟踪。该类采用单例模式设计,维护应用生命周期中的关键状态变量,包括监控状态、数据采集开关和用户配置变更标志等。
状态管理时序图:
系统监控服务
系统监控是Tai实现功能的基础,主要通过AppObserver.cs和ProcessHelper.cs实现。监控服务采用Windows API钩子技术,实时捕获应用窗口激活、进程创建和销毁事件,并通过Win32API.cs封装的系统调用获取窗口标题、进程路径等详细信息。
关键监控流程代码位于Main.cs的Run方法中,启动时依次初始化数据库自检、应用信息加载和分类数据加载:
public async void Run()
{
await Task.Run(() =>
{
CreateDirectory();
// 数据库自检
using (var db = new TaiDbContext())
{
db.SelfCheck();
}
// 加载app信息
appData.Load();
// 加载分类信息
categories.Load();
AppState.IsLoading = false;
});
// 加载应用配置
appConfig.Load();
config = appConfig.GetConfig();
UpdateConfigIgnoreProcess();
UpdateConfigProcessWhiteList();
// 初始化过滤器
_webFilter.Init();
// 启动主服务
Start();
OnStarted?.Invoke(this, EventArgs.Empty);
}
监控服务默认忽略系统关键进程,如资源管理器、任务管理器等,定义在Main.cs的DefaultIgnoreProcess数组中:
private readonly string[] DefaultIgnoreProcess = new string[] {
"Tai",
"SearchHost",
"Taskmgr",
"ApplicationFrameHost",
"StartMenuExperienceHost",
"ShellExperienceHost",
"OpenWith",
"Updater",
"LockApp",
"dwm",
"SystemSettingsAdminFlows"
};
数据采集与存储
Tai采用SQLite数据库存储监控数据,通过TaiDbContext.cs实现数据访问抽象。数据库连接管理采用单例模式,确保多线程环境下的连接安全。数据模型定义在Core/Models/Db/目录下,包括网站浏览记录(WebBrowseLogModel.cs)、应用使用时长(DailyLogModel.cs)等关键实体。
数据持久化流程主要通过Database.cs实现,提供CRUD操作的统一接口。特别值得注意的是,Tai实现了数据缓存机制,通过SiteCache.cs减少数据库访问频率,提升系统性能。
时间统计服务
时间统计是Tai的核心功能,由AppTimerServicer.cs实现。该服务通过定时器记录当前活动窗口的使用时长,当窗口焦点变化或达到统计间隔时,触发数据保存事件。时间统计精度可通过配置文件调整,默认统计间隔为60秒。
时间更新事件处理代码:
private void _appTimer_OnAppDurationUpdated(object sender, Event.AppDurationUpdatedEventArgs e)
{
UpdateAppDuration(e);
}
private void UpdateAppDuration(AppDurationUpdatedEventArgs e)
{
if (e == null) return;
try
{
var app = e.App;
int duration = e.Duration;
DateTime startTime = e.ActiveTime;
bool isCheck = IsCheckApp(app.Process, app.Description, app.ExecutablePath);
if (isCheck)
{
// 更新统计时长
data.UpdateAppDuration(app.Process, duration, startTime);
// 关联进程更新
HandleLinks(app.Process, duration, startTime);
OnUpdateTime?.Invoke(this, null);
// 自动分类
DispatchCateogry(app.Process, app.ExecutablePath);
}
}
catch (Exception ex)
{
Logger.Error(ex.ToString());
}
}
数据模型设计
Tai的数据模型采用领域驱动设计思想,将业务概念直接映射为代码实体。核心数据模型主要分为三类:应用数据模型、网站数据模型和配置数据模型。
应用数据模型
应用数据模型定义在Core/Models/AppModel.cs中,包含应用名称、描述、可执行路径、图标文件路径和分类ID等字段。应用监控事件通过AppObserverEventArgs.cs传递,包含窗口标题、进程ID和活动时间等关键信息。
网站数据模型
网站数据模型包括WebSiteModel.cs(网站基本信息)和WebBrowseLogModel.cs(浏览记录)。网站数据采集通过Chrome浏览器扩展WebExtensions/Chrome/service-worker.js实现,采用WebSocket与主程序通信,实时传输浏览记录。
配置数据模型
配置数据模型集中在Core/Models/Config/目录下,包括GeneralModel.cs(通用设置)和BehaviorModel.cs(行为设置)等。配置服务通过AppConfig.cs提供统一访问接口,支持配置变更的实时监听。
用户界面设计
Tai的用户界面采用WPF技术实现,遵循MVVM设计模式,将界面逻辑与业务逻辑分离。主窗口MainWindow.xaml采用现代化侧边栏导航设计,通过Navigation.xaml控件实现功能模块切换。
界面组件架构
UI层采用自定义控件库设计,所有控件均继承自TPage.cs基类,确保样式统一和行为一致。核心控件包括:
- 导航控件:Navigation/Navigation.xaml
- 图表控件:Charts/Charts.xaml
- 数据列表:List/BaseList.xaml
- 设置面板:SettingPanel/SettingPanel.xaml
界面主题支持动态切换,通过ThemeServicer.cs管理主题资源,实现明暗主题的无缝切换。
数据可视化实现
数据可视化是Tai界面的核心功能,通过Charts.cs实现多种图表展示,包括柱状图(应用使用时长)、饼图(分类占比)和雷达图(使用模式分析)。图表控件支持交互操作,如点击查看详情和时间范围筛选。
图表数据绑定示例:
<control:Charts
x:Name="AppUsageChart"
Type="Column"
Data="{Binding AppUsageData}"
Title="应用使用时长统计"
SubTitle="过去7天"
Margin="10"/>
响应式布局设计
Tai界面支持响应式设计,通过PageContainer.xaml控件自动适配不同窗口尺寸。导航栏在窗口宽度小于800px时自动折叠,通过Navigation.xaml.cs中的SizeChanged事件处理实现自适应逻辑。
Web扩展集成
Tai通过浏览器扩展实现网站浏览数据采集,目前支持Chrome及兼容内核浏览器。扩展组件位于WebExtensions/Chrome/目录,主要包含:
- 清单文件:manifest.json - 声明扩展权限和资源
- 内容脚本:捕获网页标题和URL变化
- 后台服务:service-worker.js - 管理WebSocket连接和数据发送
扩展与主程序的通信采用WebSocket协议,通过WebSocketEvent.cs处理消息接收,实现浏览数据的实时传输。
总结与扩展
Tai项目通过精心的架构设计,实现了Windows平台下应用和网站使用时长的精确统计。其分层架构设计确保了功能扩展的灵活性,模块化组件便于维护和升级。未来可以从以下方面进行扩展:
- 多平台支持:基于.NET Core重构核心模块,实现跨平台兼容
- 高级数据分析:引入机器学习算法,提供使用习惯分析和预测
- 云同步功能:添加用户账户系统,实现多设备数据同步
- 更多扩展支持:开发Firefox和Edge浏览器扩展,扩大适用范围
项目开发文档:README.md 完整源码地址:https://gitcode.com/GitHub_Trending/ta/Tai
通过本文的解析,相信开发者能够深入理解Tai的架构设计和实现原理,为二次开发和功能扩展提供基础。项目的模块化设计和清晰的代码结构,也为学习Windows应用开发和WPF界面设计提供了良好的参考范例。
【免费下载链接】Tai 👻 在Windows上统计软件使用时长和网站浏览时长 项目地址: https://gitcode.com/GitHub_Trending/ta/Tai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



