响应速度拉满!手把手教你自制高性能 FPS 级虚拟键盘 (Flutter + Python + UDP)
你在宿舍敲代码的时候是否感觉到键盘声音太大影响室友,图书馆时,需要敲键盘但是又怕影响到其他人,想玩一些一般的 FPS 游戏又没有带键盘,而市面上的模拟键盘产品要么效果差要么需要收费,本篇就是一个完全免费开源的解决这个问题的项目,可以直接将项目安装包安装在你的安卓设备上,便可以使用高性能虚拟键盘
1. 引言:为什么要自制虚拟键盘?
在远程控制、多端协同或 FPS 游戏场景中,我们经常需要一个能自定义按键布局、且响应极快的虚拟键盘。市面上的远程输入软件通常存在两个问题:
- 延迟高:基于 TCP 或 HTTP 的传输在高频操作下有明显的滞后感。
- 游戏屏蔽:普通的自动化库(如
pyautogui)发送的是应用层指令,无法被基于 DirectX 的全屏游戏识别。
本项目通过 Flutter 打造极致的笔记本 UI,结合 UDP 协议 实现毫秒级响应,并利用 Python PyDirectInput 驱动级模拟,成功穿透游戏屏蔽,打造出一款真正能'打游戏'的虚拟键盘。
2. 技术架构与选型
本项目由移动端(客户端)和 PC 端(服务端)两部分组成:
- 移动端 (Flutter):
- UI 布局:采用
Expanded+flex权重布局,完美对齐成长方形,还原笔记本手感。 - 底层监听:使用
Listener获取原始触控数据,实现智能手掌防误触。 - 网络通信:使用
RawDatagramSocket发送极简 UDP 包。
- UI 布局:采用
- PC 服务端 (Python):
- 网络监听:异步处理 UDP 数据包,识别指令。
- 硬件模拟:调用
pydirectinput发送驱动级扫描码(Scan Codes),确保游戏兼容性。
3. 核心功能实现方案
3.1 UDP 极速握手与心跳机制
为了实现'按下即响应',我们抛弃了 TCP。UDP 就像发短信,不需要建立连接,速度极快。 同时,为了实现 App 端的在线/离线状态感应,我们设计了双向心跳:
- App 端:每 2 秒发送一个
PING:PING指令。 - 服务端:收到包含
PING的数据后立即返回PONG。 - 状态联动:App 若在 4 秒内未收到回传,指示灯自动变红,按钮切回离线状态。
3.2 完美的笔记本式布局 (Rectangle Layout)
笔记本键盘的左右两侧是绝对对齐的。在 Flutter 中,如果手动计算宽度,很容易因为 Margin 导致溢出。
解决方案:统一每一行的 flex 权重总和(例如 100),通过分配比例实现完美长方形。
- 普通字母键:
flex: 60 - Tab 键:
flex: 90 - Space 键:
flex: 335


