本文档介绍了 Shadowsocks Windows 客户端中的全局快捷键系统。快捷键系统允许用户使用全局键盘快捷方式控制 Shadowsocks 的各种功能,即使应用程序最小化到系统托盘也能正常工作。
Shadowsocks 快捷键系统为常用操作提供了键盘快捷方式,例如开启/关闭代理、在全球模式和 PAC 模式之间切换以及在不同服务器之间导航。这些快捷键在整个操作系统中全局有效,无论当前焦点在哪一个应用程序上。
图示:快捷键系统架构和流程
来源:shadowsocks-csharp/Controller/System/Hotkeys/Hotkeys.cs10-173 shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs6-114
HotKeys 静态类是快捷键系统的核心。它负责全局快捷键的注册、处理和转换。
主要组成部分包括:
HotKeyCallBackHandler 委托类型图示:HotKeys 和 HotkeyCallbacks 类结构
来源:shadowsocks-csharp/Controller/System/Hotkeys/Hotkeys.cs10-173 shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs6-114
当注册一个快捷键时,会发生以下过程:
HotKey 对象RegHotkey 方法,传入快捷键和回调HotKeyManager 向 Windows 注册快捷键_keymap 字典中如果快捷键已被其他应用程序注册,注册将失败并返回 false。
来源:shadowsocks-csharp/Controller/System/Hotkeys/Hotkeys.cs40-163
HotkeyCallbacks 类实现了按下快捷键时执行的实际操作。它是一个以 ShadowsocksController 引用初始化的单例类。
可用回调包括:
| 回调名称 | 描述 |
|---|---|
| SwitchSystemProxyCallback | 开启或关闭 Shadowsocks 代理 |
| SwitchSystemProxyModeCallback | 在全球模式和 PAC 模式之间切换 |
| SwitchAllowLanCallback | 切换是否允许局域网设备访问代理 |
| ShowLogsCallback | 打开日志窗口 |
| ServerMoveUpCallback | 选择列表中的上一个服务器 |
| ServerMoveDownCallback | 选择列表中的下一个服务器 |
来源:shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs47-110
以下序列图展示了快捷键按下后的处理过程:
图示:快捷键处理序列
来源:shadowsocks-csharp/Controller/System/Hotkeys/Hotkeys.cs32-38 shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs47-110
HotKeys 类提供了在字符串表示和 HotKey 对象之间进行转换的方法:
HotKey2Str:将 HotKey 对象转换为 "Alt+Shift+D" 这样的字符串Str2HotKey:解析 "Alt+Shift+D" 这样的字符串以创建 HotKey 对象这些转换用于保存/加载快捷键配置并在用户界面中显示它们。
来源:shadowsocks-csharp/Controller/System/Hotkeys/Hotkeys.cs84-135
快捷键系统在 Shadowsocks 应用程序启动时进行初始化:
ShadowsocksController 在其初始化过程中调用 HotKeys.Init(this)HotKeys.Init 初始化 HotKeyManager 并设置事件处理程序HotKeys.Init 调用 HotkeyCallbacks.InitInstance(controller) 以创建回调单例HotKeys.Destroy() 清理资源来源:shadowsocks-csharp/Controller/System/Hotkeys/Hotkeys.cs18-30 shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs9-17
下表显示了可以分配给快捷键的常用操作:
| 操作 | 回调方法 | 操作 |
|---|---|---|
| 切换系统代理 | SwitchSystemProxyCallback | 启用或禁用代理 |
| 切换系统代理模式 | SwitchSystemProxyModeCallback | 在全球模式和 PAC 模式之间切换 |
| 切换允许局域网连接 | SwitchAllowLanCallback | 启用或禁用局域网访问代理 |
| 显示日志 | ShowLogsCallback | 打开日志窗口 |
| 选择上一个服务器 | ServerMoveUpCallback | 切换到列表中的上一个服务器 |
| 选择下一个服务器 | ServerMoveDownCallback | 切换到列表中的下一个服务器 |
来源:shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs47-110
HotkeyCallbacks 中的 GetCallback 方法使用反射根据方法名动态创建委托。这允许在配置中通过名称引用快捷键回调。
来源:shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs24-30
HotKeys 中的 Register 方法处理常见的注册错误:
false 表示失败。来源:shadowsocks-csharp/Controller/System/Hotkeys/Hotkeys.cs139-163
Shadowsocks Windows 客户端的快捷键系统提供了一种灵活且强大的方式,通过全局键盘快捷键控制应用程序。它使用 GlobalHotKey 库与 Windows 操作系统进行交互,并在快捷键注册/管理和实际回调实现之间提供了清晰的分离。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(891d97)