本项目是 LowLatencyInput 系统 的 PC 端组件,负责接收数据并模拟 Windows 输入。
Fastkey 是一个 C++ 应用程序,旨在接收来自外部源(通常是运行 LowLatencyInput 的移动设备,可能通过像 android_usb_listener 这样的桥接程序)的触摸屏和 UI 事件数据,并将它们映射为 Windows 系统上的鼠标和键盘输入。其主要功能包括:
- 触摸转鼠标: 将特定触摸设备输入的相对移动转换为鼠标光标的相对移动,并应用可配置的灵敏度因子。
- UI 事件映射: 将来自外部 UI 源的特定事件(例如,点击预定义图标)映射到具体的键盘按键或鼠标点击操作。
- 输入模拟: 底层使用 Windows
SendInputAPI 来模拟键盘和鼠标操作。
此项目依赖于外部进程将数据写入特定的 Windows 共享内存区域:
- 触摸数据: 外部进程需将触摸点数据 (
SharedTouchData) 写入名为Global\\\\TouchSharedMemory的共享内存,并使用Global\\\\TouchDataUpdatedEvent事件通知更新。 - UI 事件数据: 外部进程需将 UI 事件数据 (
SharedUiData) 写入名为Global\\\\UiSharedMemory的共享内存,并使用Global\\\\UiDataUpdatedEvent事件通知更新。
这些外部进程(例如 LowLatencyInput 移动应用配合 android_usb_listener 桥接程序)不包含在此代码库中。
FastKeyLibrary: 核心库,包含输入处理、映射和模拟逻辑。TouchInput: 处理来自触摸服务器的共享内存数据。UiInput: 处理来自 UI 服务器的共享内存数据。KeyboardInput: 模拟键盘输入。MouseInput: 模拟鼠标输入。UiActionMapper: 将 UI 事件映射到键盘/鼠标操作。InputMapper: (基础实现) 将字符串别名映射到虚拟键码。
fastkey(可执行文件): 主应用程序,初始化输入系统,读取共享内存数据,并执行输入映射和模拟循环。test_fastkey(可执行文件): 用于测试底层键盘和鼠标输入模拟延迟的性能测试程序。
- C++17 兼容的编译器 (如 MSVC, GCC, Clang)
- CMake (版本 3.15 或更高)
- Windows 操作系统: 核心功能(共享内存通信和
SendInput)依赖 Windows API。 - 外部数据源进程: 需要一个能够将触摸和 UI 数据写入指定共享内存区域的外部系统(例如,由
LowLatencyInput和android_usb_listener组成)。Fastkey 本身不产生输入数据。
使用 CMake 进行构建。假设您已安装 CMake 和 C++ 编译器:
- 创建构建目录:
mkdir build cd build - 配置项目:
# 对于 Visual Studio cmake .. -G "Visual Studio 17 2022" -A x64
- 构建项目:
构建成功后,可执行文件
cmake --build . --config Releasefastkey.exe和test_fastkey.exe(以及库文件) 将位于build/src/Release和build/tests/Release(或类似路径,取决于您的生成器和配置)。
-
确保外部数据源系统(例如
LowLatencyInput移动应用和android_usb_listener桥接程序)正在运行,并且能够正确地将数据写入Global\\\\TouchSharedMemory、Global\\\\UiSharedMemory并触发相应的事件。如果数据源未运行或配置不当,Fastkey 将在初始化时报错或无法接收数据。 -
运行主程序:
# 导航到可执行文件目录 cd build/src/Release ./fastkey.exe
程序将开始监听共享内存中的数据,并将触摸输入映射为鼠标移动,将 UI 事件映射为键盘/鼠标操作。按
Ctrl+C退出。 -
运行性能测试 (可选):
# 导航到测试可执行文件目录 cd build/tests/Release ./test_fastkey.exe
测试程序将执行并输出键盘和鼠标操作的延迟统计信息。
当前配置主要通过修改源代码实现:
- 鼠标灵敏度: 在
src/main.cpp文件的main函数开头,修改g_sensitivityFactor的值。// src/main.cpp int main() { // ... g_sensitivityFactor = 1.3; // <--- 修改这个值 (例如: 1.5 表示提高50%, 0.7 表示降低30%) // ... }
- UI 事件到操作的映射: 在
src/FastKey/UiActionMapper.cpp文件的processUiEvent方法中,修改switch语句中的映射逻辑。// src/FastKey/UiActionMapper.cpp void UiActionMapper::processUiEvent(...) { // ... switch (type) { case IconType::Grenade: keyboard.clickKey(numberCharToVkCode('2')); // 修改映射的目标按键 break; // ... 其他映射 ... } // ... }
- 键盘别名映射 (基础): 在
src/FastKey/InputMapper.cpp文件的loadKeyboardMapping方法中,可以添加或修改硬编码的别名到虚拟键码的映射。
本项目采用 Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) 许可证。