nmk 全称 network mouse and keyboard,网络键鼠。设计初衷是开发一套跨平台的键鼠共享工具(这在多屏多操作系统中很有用)。目前实现了 windows 64 位机器下的鼠标键盘共享(未测试32位操作系统),设计上仍有较多缺陷和不足。
目前在 windows 平台获取键盘鼠标事件的接口仍不够底层,比较遗憾。
最初的想法是一套键鼠控制多台主机。当鼠标移出屏幕时,禁用当前主机的控制信号,将操作指令发送给其他主机。这就需要即获取鼠标在屏幕中的绝对坐标,用以判断是否移出屏幕,又要获取鼠标相对坐标数据,用以控制其他主机。目前的相对坐标是通过两次绝对坐标求差,软件计算得出来的,因为不够底层(出屏负坐标会被操作系统校正为0),所以存在很多问题。
鼠标硬件信号经驱动处理后本身产生的应该就是准确的、实时的相对坐标数据,目前在 windows 上未找到读取方法。
对于 linux 平台,读取相对坐标反而很简单,linux 输入子系统提供了文件句柄 /dev/input/event3 /dev/input/event4
来读取相对坐标数据。读取绝对坐标需要使用 X11
相关的接口,也不难实现。当 linux 作为键鼠信号源时,可以实时获取X11
的鼠标位置,当判断出屏后,使用ioctl
独占前述文件句柄。
Mac 平台,穷孩子没测试环境,当前不考虑。
在项目根目录go build
生成可执行文件,将该文件拷贝到被控端,直接运行。在控制端的可执行文件后追加参数被控端ip:9090
,等待连接完成后,移动鼠标进行测试。
- 键盘 vkCode2ScanCode 异常
- 禁用 windows 系统快捷键(如锁屏、休眠键)
- windows 更底层的相对坐标数据读取
- 出屏切换被控端相关逻辑(+被控端出屏判断)
- linux、mac 实现
- 提高控制的稳定性(考虑事件消息队列?、解决网络等产生的阻塞)
- 网页版键鼠同步?可能吧