WPF 友好的 Shell_NotifyIcon 包装类 - 第三部分:广告拦截器前端





0/5 (0投票)
本文逐步介绍了广告拦截应用程序的前端,该应用程序位于通知图标后面。
引言
本文提供了一个机会来了解我在为 Windows 10 桌面构建广告拦截器前端时探索的一系列主题。我的下一篇文章将介绍此广告拦截器的后端。我的主要目标是创建一个可以通过单击通知图标启用或禁用的广告拦截器。
本文(第 3 部分:广告拦截器前端)是 NotifyIconLibrary
在实际应用中的一个实例。
背景
用户界面目标
我对 UI 的目标很简单
- 从通知图标的上下文菜单控制广告拦截器的操作
- 提供以下命令
块
解除阻止
关于
退出
- 提供对键盘导航的支持
- 提供多语言支持
- 使用 MVVM 概念
- 使用视图模型将“是什么”与“怎么做”分开。
- 使用
RelayCommand
尽可能消除视图中的事件处理程序。 - 使用
EventToCommand
将“是什么”与“怎么做”分开。
- 通过创建一个无需提升即可直接调试的后端存根,使 GUI 易于测试。
Using the Code
AdBlockerTest
可以在 Visual Studio 2019 Preview 下或独立运行。您可以使用调试版本或发布版本。我建议在调试器下运行调试版本,以便您可以与正在运行的应用程序交互以查看它正在做什么。
执行从 Program Module 开始,并使用 AppWrapper
项目、AdBlockingManager
存根和 AdBlockerLibrary
项目。反过来,AdBlockerLibrary
项目使用 NotifyIconWrapper
项目。
AdBlockingLibrary
中有一个名为 IAdBlockingManager
的接口,它“定义了 AdBlockingLibrary
与其两个可能的客户端:AdBlockingManager
和 AdBlockingManagerStub
之间的契约”。这抽象出了这两个替代客户端相对于 AdBlockingLibrary
所承担的职责。
应用程序启动后,您将在任务栏上找到一个通知图标。该图标将是一个绿色交通信号灯。几秒钟后,通知图标将迁移到通知区域。那是单击任务栏上的“^”符号时显示的矩形弹出窗口。您可以左键双击通知图标以反转交通信号灯的设置。红色(停止)表示当前阻止了广告。绿色(通行)表示当前未阻止广告。您也可以使用键盘导航到任务栏上的通知图标或“^”符号,方法是按 Windows+B,然后按一些向右箭头。如果通知图标被隐藏,一旦您到达“^”符号,请按空格键打开通知区域。然后使用箭头键导航到通知图标。现在您可以使用上下文菜单键或 Enter 键打开应用程序的上下文菜单。您可以使用向上和向下箭头键导航到上下文菜单,或使用 Escape 键关闭上下文菜单。您也可以通过右键单击通知图标来打开上下文菜单。您可以使用空格键或 Enter 键,或者通过左键单击所需的项目,从上下文菜单中选择一个项目。有四个项目
- 阻止 项目阻止广告
- 解除阻止 选项解除对广告的阻止
- 关于 选项打开“关于”对话框
- 退出 选项关闭上下文菜单,删除通知图标并退出应用程序
您可以通过单击“X”或按 Escape 键来关闭“关于”对话框。
关注点
这种架构设计的一个不寻常的方面是,主视图是在 dll (AdBlockerLibrary
) 中定义的,而不是在通常的 exe (AdBlockerTest
) 中定义的。
我选择使此应用程序独立于此类第三方代码,而不是依赖 MVVM Light。这样做的一个影响是,我选择使用 EventBindingExtension
而不是按预期使用 EventToCommand
。它更优雅,但不幸的是,便携性较差。如果您要使用 MVVM Light 或其他替代方案,您可以很容易地在此处对其进行改造。事实上,这里有几个类可以很容易地被 MVVM Light 的等效功能所取代。
本系列中的下一篇文章将介绍广告拦截应用程序的后端。
历史
- 2020 年 12 月 1 日:初始版本