Skip to content

Windows client for receiving external input data (e.g., touch, UI events via shared memory) and simulating low-latency mouse/keyboard actions. | 用于接收外部输入数据(如通过共享内存传递的触摸、UI事件)并低延迟模拟鼠标/键盘操作的 Windows 客户端程序。

Notifications You must be signed in to change notification settings

shuakami/Fastkey

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fastkey

Language Build System Platform Version

概述

本项目是 LowLatencyInput 系统 的 PC 端组件,负责接收数据并模拟 Windows 输入。

Fastkey 是一个 C++ 应用程序,旨在接收来自外部源(通常是运行 LowLatencyInput 的移动设备,可能通过像 android_usb_listener 这样的桥接程序)的触摸屏和 UI 事件数据,并将它们映射为 Windows 系统上的鼠标和键盘输入。其主要功能包括:

  • 触摸转鼠标: 将特定触摸设备输入的相对移动转换为鼠标光标的相对移动,并应用可配置的灵敏度因子。
  • UI 事件映射: 将来自外部 UI 源的特定事件(例如,点击预定义图标)映射到具体的键盘按键或鼠标点击操作。
  • 输入模拟: 底层使用 Windows SendInput API 来模拟键盘和鼠标操作。

此项目依赖于外部进程将数据写入特定的 Windows 共享内存区域:

  1. 触摸数据: 外部进程需将触摸点数据 (SharedTouchData) 写入名为 Global\\\\TouchSharedMemory 的共享内存,并使用 Global\\\\TouchDataUpdatedEvent 事件通知更新。
  2. 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 数据写入指定共享内存区域的外部系统(例如,由 LowLatencyInputandroid_usb_listener 组成)。Fastkey 本身不产生输入数据。

构建

使用 CMake 进行构建。假设您已安装 CMake 和 C++ 编译器:

  1. 创建构建目录:
    mkdir build
    cd build
  2. 配置项目:
    # 对于 Visual Studio
    cmake .. -G "Visual Studio 17 2022" -A x64 
  3. 构建项目:
    cmake --build . --config Release
    构建成功后,可执行文件 fastkey.exetest_fastkey.exe (以及库文件) 将位于 build/src/Releasebuild/tests/Release (或类似路径,取决于您的生成器和配置)。

运行

  1. 确保外部数据源系统(例如 LowLatencyInput 移动应用和 android_usb_listener 桥接程序)正在运行,并且能够正确地将数据写入 Global\\\\TouchSharedMemoryGlobal\\\\UiSharedMemory 并触发相应的事件。如果数据源未运行或配置不当,Fastkey 将在初始化时报错或无法接收数据。

  2. 运行主程序:

    # 导航到可执行文件目录
    cd build/src/Release 
    ./fastkey.exe

    程序将开始监听共享内存中的数据,并将触摸输入映射为鼠标移动,将 UI 事件映射为键盘/鼠标操作。按 Ctrl+C 退出。

  3. 运行性能测试 (可选):

    # 导航到测试可执行文件目录
    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) 许可证。

About

Windows client for receiving external input data (e.g., touch, UI events via shared memory) and simulating low-latency mouse/keyboard actions. | 用于接收外部输入数据(如通过共享内存传递的触摸、UI事件)并低延迟模拟鼠标/键盘操作的 Windows 客户端程序。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published