如何让PC伪装为Android的物理鼠标/键盘(无触控、无OTG)
可行!但分平台有不同实现路径,还有几个省心的替代方案
先给你吃个定心丸:安卓原生支持标准USB HID鼠标/键盘,所以核心问题是让你的PC从「USB主机」切换成「USB外设」,模拟HID设备让安卓识别。下面分编程实现和替代方案给你细说:
一、用C/C++等语言实现的可行性
这个方向是完全可行的,但不同平台的难度差异很大:
Linux平台(最容易上手)
Linux内核自带USB Gadget框架,专门用来让设备模拟USB外设。用C/C++写代码的话,你可以基于这个框架开发简单的HID模拟程序,甚至不用写代码,直接用内核模块就能搞定:
- 先确认你的PC支持USB OTG(进BIOS找「USB Role Switch」「USB Device Mode」这类选项开启);
- 加载内核模块并配置(以鼠标为例):
如果你要写C代码,直接操作# 加载基础模块 modprobe libcomposite modprobe g_hid # 写入鼠标的HID报告描述符 echo -n -e "\x05\x01\x09\x02\xa1\x01\x09\x01\xa1\x00\x05\x09\x19\x01\x29\x03\x15\x00\x25\x01\x95\x03\x75\x01\x81\x02\x95\x01\x75\x05\x81\x01\x05\x01\x09\x30\x09\x31\x15\x81\x25\x7f\x75\x08\x95\x02\x81\x06\xc0\xc0" > /sys/kernel/config/usb_gadget/my_hid/functions/hid.usb0/report_desc # 启用模拟设备 echo 1 > /sys/kernel/config/usb_gadget/my_hid/UDC/sys下的gadget节点就行,逻辑非常清晰。
Windows平台(有一定门槛)
Windows默认是USB主机模式,要切换成设备模式需要用到微软的USB Function Class Extension (UFX),这意味着你得写Windows驱动程序(用C/C++),还要处理驱动签名的问题(除非你临时禁用驱动签名验证)。
- 可以用
libusb或者WinUSB辅助开发,但整体复杂度比Linux高不少; - 也可以找现成的开源项目修改,比如
USBDeviceEmulator,编译后就能快速模拟HID设备。
macOS平台(难度较高)
Apple对USB设备模式的限制比较严格,官方没有开放简单的开发框架,你得用IOKit做底层开发,而且很多功能需要系统权限,甚至可能需要特殊的系统配置才能实现,不推荐优先尝试。
二、无需编程的替代方案(优先试试这些!)
如果不想折腾代码,这些方案更省心:
- Linux现成工具一键模拟:刚才提到的
g_hid模块,配合usbgadget工具链,不用写一行代码就能配置成鼠标/键盘,网上有很多现成的脚本可以直接套用。 - Windows第三方工具:比如
USB Redirector(部分功能付费),或者各类HID Emulator工具,能让PC快速模拟HID外设,注意需要跳过Windows驱动签名验证。 - ADB无线调试(仅限之前开了开发者模式的情况):如果你的手机之前开启过开发者模式和ADB调试,而且能自动连接WiFi(和PC同局域网),可以用
adb shell input命令模拟操作:
这个方案不需要USB连接,只要能连WiFi就行。adb shell input tap 500 500 # 模拟点击屏幕坐标(500,500) adb shell input text "hello world" # 模拟输入文字 adb shell input swipe 100 500 900 500 1000 # 模拟从左到右滑动(耗时1秒) - 应急无线投屏映射:如果你的手机之前开了Miracast/Chromecast投屏,把屏幕投到PC或电视上,部分安卓系统支持投屏后的鼠标映射(用PC鼠标操作投屏画面,同步到手机),不过这个依赖系统支持,不一定能成功。
三、关键注意事项
- 必须用可传输数据的USB线:很多充电线只有电源线,没有数据线,一定要找能传文件的那种;
- PC的USB OTG支持:大部分新的USB-C接口PC都支持,但USB-A接口可能需要OTG适配器(你说没有的话就优先用USB-C直连);
- 安卓无需额外操作:标准HID设备是安卓原生支持的,只要PC模拟成功,安卓会自动识别成鼠标/键盘,不需要触屏操作任何设置。
内容的提问来源于stack exchange,提问作者theebugger




