1# uinput 2 3<!--Kit: Input Kit--> 4<!--Subsystem: MultimodalInput--> 5<!--Owner: @zhaoxueyuan--> 6<!--Designer: @hanruofei--> 7<!--Tester: @Lyuxin--> 8<!--Adviser: @Brilliantry_Rui--> 9 10uinput 可模拟用户操作,例如鼠标、键盘、触控板等设备,适用于稳定性等压力测试。 11 12## 环境要求 13 14- 根据hdc命令行工具指导,完成[环境准备](hdc.md#环境准备)。 15 16- 确保设备已成功连接,并执行hdc shell。 17 18## uinput功能 19 20**用法** 21```bash 22uinput <option> <command> <arg> ... 23``` 24 25**支持能力** 26| 命令简写 | 命令全写 | 含义说明 | 27| -------- | -------- | -------- | 28| -M | --mouse | 注入鼠标事件。 | 29| -K | --keyboard | 注入键盘事件。 | 30| -S | --stylus | 注入触控笔事件。 | 31| -T | --touch | 注入触摸事件。 | 32| -P | --touchpad | 注入触控板事件。| 33| -? | --help | 帮助命令。 | 34 35> **说明:** 36> 37> 命令中与坐标相关的参数,单位均为[px(屏幕物理像素单位)](../reference/apis-arkui/arkui-ts/ts-pixel-units.md)。 38 39## 帮助命令 40 41显示uinput工具支持的命令信息。 42 43**命令** 44```bash 45uinput -? 46uinput --help 47``` 48 49**使用示例** 50```bash 51# 显示帮助信息 52uinput -? 53 54# 执行结果 55Usage: uinput <option> <command> <arg>... 56The option are: 57-K --keyboard 58commands for keyboard: 59-d <key> --down <key> -press down a key 60-u <key> --up <key> -release a key 61-l <key> [long press time] --long_press <key> [long press time] -press and hold the key 62-r <key> [repeat output time] --repeat output <key> [repeat output time] -press and hold the key 63-i <time> --interval <time> -the program interval for the (time) milliseconds 64 65... 66 67``` 68 69## 鼠标事件 70 71模拟鼠标移动、点击等。 72 73### 鼠标移动事件 74模拟鼠标移动到以指定屏幕左上角为原点的相对坐标系的位置(dx, dy)。 75 76**命令** 77```bash 78uinput -M -m <dx> <dy> 79uinput --mouse --move <dx> <dy> 80 81# <dx> <dy>以屏幕左上角为原点的相对坐标系的位置坐标。 82``` 83 84**使用示例** 85```bash 86# 模拟鼠标移动到以指定屏幕左上角为原点的相对坐标系的位置(100, 100)。 87uinput -M -m 100 100 88``` 89 90**扩展命令** 91```bash 92uinput -M -m <dx1> <dy1> <dx2> <dy2> [smooth time] --trace 93uinput --mouse --move <dx1> <dy1> <dx2> <dy2> [smooth time] --trace 94 95# <dx1> <dy1>鼠标移动起点以屏幕左上角为原点的相对坐标系的位置坐标。 96# <dx2> <dy2>鼠标移动终点以屏幕左上角为原点的相对坐标系的位置坐标。 97# 补充选项 --trace 可以模拟鼠标移动到以指定屏幕左上角为原点的相对坐标系的位置及过程。 98# [smooth time]移动时间,单位:ms,默认值:1000,取值范围:[1,15000],仅支持整数。 99``` 100 101**使用示例** 102```bash 103# 模拟鼠标从(100, 100)花费1500ms移动到(200, 200)。 104uinput -M -m 100 100 200 200 1500 --trace 105``` 106 107### 鼠标按键按下事件 108模拟鼠标按下按键,建议与鼠标按键抬起事件搭配使用,确保事件闭环。buttonId:[鼠标按键](#鼠标按键)。 109 110**命令** 111```bash 112uinput -M -d <buttonId> 113uinput --mouse --down <buttonId> 114``` 115 116### 鼠标按键抬起事件 117模拟鼠标抬起按键,建议与鼠标按键按下事件搭配使用,确保事件闭环。buttonId:[鼠标按键](#鼠标按键)。 118 119**命令** 120```bash 121uinput -M -u <buttonId> 122uinput --mouse --up <buttonId> 123``` 124 125**使用示例** 126```bash 127# 模拟按下鼠标左键并抬起。 128uinput -M -d 0 -u 0 129``` 130 131### 鼠标按键单击事件 132模拟鼠标单击按键。buttonId:[鼠标按键](#鼠标按键)。 133 134**命令** 135```bash 136uinput -M -c <buttonId> 137uinput --mouse --click <buttonId> 138``` 139 140**使用示例** 141```bash 142# 模拟单击鼠标左键。 143uinput -M -c 0 144``` 145 146### 双击鼠标按键事件 147模拟双击鼠标按键。buttonId:[鼠标按键](#鼠标按键)。 148 149**命令** 150```bash 151uinput -M -b <dx> <dy> <buttonId> [press time] [click interval time] 152uinput --mouse --double_click <dx> <dy> <buttonId> [press time] [click interval time] 153 154# <dx> <dy>以屏幕左上角为原点的相对坐标系的位置坐标。 155# [press time]首次按压时间,可选参数,单位:ms,默认时间为:50,取值范围:[1,300],仅支持整数。 156# [click interval time]点击间隔时间,可选参数,单位:ms,默认时间为:300,取值范围:[1,450],仅支持整数。 157``` 158 159**使用示例** 160```bash 161# 模拟在(100, 150)位置双击鼠标左键。 162uinput -M -b 100 150 0 10 10 163``` 164 165### 鼠标滚轴滚动事件 166模拟鼠标滚轴向前/向后滚动,需与鼠标移动事件搭配使用。 167 168**命令** 169```bash 170uinput -M -m <dx1> <dy1> -s <number> 171uinput --mouse --move <dx1> <dy1> --scroll <number> 172 173# <dx1> <dy1>以屏幕左上角为原点的相对坐标系的位置坐标。 174# <number>鼠标滚动刻度数,正数向后滚动,负数向前滚动,一个刻度是15。 175``` 176 177**使用示例** 178```bash 179# 模拟鼠标移动到以指定屏幕左上角为原点的相对坐标系的位置(100, 200),鼠标滚轴向后滚动三个刻度。 180uinput -M -m 100 200 -s 45 181``` 182 183### 鼠标拖拽事件 184模拟鼠标拖拽。 185 186**命令** 187```bash 188uinput -M -g <dx1> <dy1> <dx2> <dy2> [total time] 189uinput --mouse --drag <dx1> <dy1> <dx2> <dy2> [total time] 190 191# <dx1> <dy1>鼠标拖拽起点以屏幕左上角为原点的相对坐标系的位置坐标。 192# <dx2> <dy2>鼠标拖拽终点以屏幕左上角为原点的相对坐标系的位置坐标。 193# [total time]拖拽总耗时,可选参数,单位:ms,默认值为1000,取值范围:[1,15000],仅支持整数。 194``` 195 196**使用示例** 197```bash 198# 模拟按下鼠标左键从(200, 650)耗时15000ms拖动到(500, 300)后释放鼠标左键。 199uinput -M -g 200 650 500 300 15000 200``` 201 202### 设置鼠标事件间隔 203设置鼠标事件的程序间隔,以ms为单位。需与其它鼠标事件命令搭配使用,否则此命令无效。 204 205**命令** 206```bash 207uinput -M -i <time> 208uinput --mouse --interval <time> 209 210# <time>鼠标事件间隔时间,单位:ms,取值范围:[1,15000],仅支持整数。 211``` 212 213**使用示例** 214```bash 215# 模拟单击鼠标左键间隔500ms后再次单击鼠标左键。 216uinput -M -c 0 -i 500 -c 0 217``` 218 219### 鼠标按键 220| buttonId | 含义说明 | 221| -------- | -------- | 222| 0 | 鼠标左键 | 223| 1 | 鼠标右键 | 224| 2 | 鼠标中键 | 225| 3 | 鼠标侧边键 | 226| 4 | 鼠标扩展键 | 227| 5 | 鼠标前进键 | 228| 6 | 鼠标后退键 | 229| 7 | 鼠标任务键 | 230 231## 键盘事件 232 233模拟键盘按键输入。 234 235### 键盘按键按下事件 236模拟键盘按下按键,建议与键盘按键抬起事件搭配使用,确保事件闭环。keyCode:[键值定义说明](../reference/apis-input-kit/js-apis-keycode.md)。 237 238**命令** 239```bash 240uinput -K -d <keyCode> 241uinput --keyboard --down <keyCode> 242``` 243 244### 键盘按键抬起事件 245模拟键盘抬起按键,必须与键盘按键按下事件搭配使用,确保事件闭环。keyCode:[键值定义说明](../reference/apis-input-kit/js-apis-keycode.md)。 246 247**命令** 248```bash 249uinput -K -u <keyCode> 250uinput --keyboard --up <keyCode> 251``` 252 253**使用示例** 254```bash 255# 模拟按下"A"键并抬起。 256uinput -K -d 2017 -u 2017 257``` 258 259### 键盘按键长按事件 260模拟键盘按下一个按键并保持设定的时长后抬起,无需再次注入键盘按键抬起事件。长按期间不会重复注入按键按下事件。keyCode:[键值定义说明](../reference/apis-input-kit/js-apis-keycode.md)。 261 262**命令** 263```bash 264uinput -K -l <keyCode> [long press time] 265uinput --keyboard --long_press <keyCode> [long press time] 266 267# [long press time]长按时间,可选参数,单位:ms,默认值为3000,取值范围:[3000,15000],仅支持整数。 268``` 269 270**使用示例** 271```bash 272# 模拟按下"A"键并保持6000ms后抬起。 273uinput -K -l 2017 6000 274``` 275 276### 键盘按键持续输入事件 277模拟键盘按下一个按键并在设定的时长内持续输入按下事件后抬起,无需再次注入键盘按键抬起事件。长按期间会重复注入按键按下事件。keyCode:[键值定义说明](../reference/apis-input-kit/js-apis-keycode.md)。 278 279**命令** 280```bash 281uinput -K -r <keyCode> [repeat output time] 282uinput --keyboard --repeat <keyCode> [repeat output time] 283 284# [repeat output time]重复上报按键按下事件的持续时间,可选参数,单位:ms,默认值为3000,取值范围:[3000,15000],仅支持整数。 285``` 286 287**使用示例** 288```bash 289# 模拟按下"A"键并在4000ms内重复输入。 290uinput -K -r 2017 4000 291``` 292 293### 设置键盘事件间隔 294设置键盘事件的程序间隔,以ms为单位。需与其它键盘事件命令搭配使用,否则此命令无效。 295 296**命令** 297```bash 298uinput -K -i <time> 299uinput --keyboard --interval <time> 300 301# <time>键盘事件间隔时间,单位:ms,取值范围:[1,15000],仅支持整数。 302``` 303 304**使用示例** 305```bash 306# 模拟按下键盘"A"键间隔500ms后释放。 307uinput -K -d 2017 -i 500 -u 2017 308``` 309 310### 键盘文本输入事件 311模拟键盘输入文本。不支持与其它命令组合使用。只支持ASCII字符,最大支持输入字符2000个。 312 313**命令** 314```bash 315uinput -K -t <text> 316uinput --keyboard --text <text> 317``` 318 319**使用示例** 320```bash 321# 模拟输入一段文本"Hello,World!" 322uinput -K -t Hello,World! 323``` 324 325## 触控笔事件 326 327模拟触控笔点击、滑动等。实际注入效果与[触摸事件](#触摸事件)一致,建议优先使用触摸事件命令。 328 329### 触控笔按下事件 330模拟触控笔在(dx dy)按下,建议与触控笔抬起事件搭配使用,确保事件闭环。 331 332**命令** 333```bash 334uinput -S -d <dx> <dy> 335uinput --stylus --down <dx> <dy> 336 337# <dx> <dy>以屏幕左上角为原点的相对坐标系的位置坐标。 338``` 339 340### 触控笔抬起事件 341模拟触控笔在(dx dy)抬起,建议与触控笔按下事件搭配使用,确保事件闭环。 342 343**命令** 344```bash 345uinput -S -u <dx> <dy> 346uinput --stylus --up <dx> <dy> 347 348# <dx> <dy>以屏幕左上角为原点的相对坐标系的位置坐标。 349``` 350 351**使用示例** 352```bash 353# 模拟在(100, 100)位置按下并抬起。 354uinput -S -d 100 100 -u 100 100 355``` 356 357### 触控笔移动事件 358模拟触控笔从(dx1, dy1)按下在指定时间内移动到(dx2, dy2)后抬起。 359 360**命令** 361```bash 362uinput -S -m <dx1> <dy1> <dx2> <dy2> [smooth time] [-k keep time] 363uinput --stylus --move <dx1> <dy1> <dx2> <dy2> [smooth time] [-k keep time] 364 365# <dx1> <dy1>触控笔移动起点以屏幕左上角为原点的相对坐标系的位置坐标。 366# <dx2> <dy2>触控笔移动终点以屏幕左上角为原点的相对坐标系的位置坐标。 367# [smooth time]移动时间,可选参数,单位:ms,默认值为1000,取值范围:[1,15000],仅支持整数。 368# [-k keep time]移动至目标位置后抬起前的停留时间,可选参数,单位:ms,默认值为0,取值范围:[0,60000],仅支持整数。 369``` 370 371**使用示例** 372```bash 373# 模拟触控笔从(100, 1000)按下,花费1000ms移动到(100, 2000)后,保持按下1000ms后抬起。 374uinput -S -m 100 1000 100 2000 1000 -k 1000 375``` 376 377### 触控笔单击事件 378模拟触控笔在(dx, dy)位置单击。 379 380**命令** 381```bash 382uinput -S -c <dx> <dy> [click interval] 383uinput --stylus --click <dx> <dy> [click interval] 384 385# <dx> <dy>以屏幕左上角为原点的相对坐标系的位置坐标。 386# [click interval]点击间隔时间,可选参数,单位:ms,默认值为100,取值范围:[1,450],仅支持整数。 387``` 388 389**使用示例** 390```bash 391# 模拟触控笔在(100, 100)位置单击。 392uinput -S -c 100 100 393``` 394 395### 触控笔拖拽事件 396模拟触控笔拖拽。 397 398**命令** 399```bash 400uinput -S -g <dx1> <dy1> <dx2> <dy2> [press time] [total time] 401uinput --stylus --drag <dx1> <dy1> <dx2> <dy2> [press time] [total time] 402 403# <dx1> <dy1>触控笔拖拽起点以屏幕左上角为原点的相对坐标系的位置坐标。 404# <dx2> <dy2>触控笔拖拽终点以屏幕左上角为原点的相对坐标系的位置坐标。 405# [press time]拖拽移动前的按压持续时间,可选参数,单位:ms,默认值为500,取值范围:[500,14500],仅支持整数。 406# [total time]拖动时间,可选参数,单位:ms,默认值为1000,取值范围:[1000,15000],仅支持整数。[total time] - [press time]不能少于500,否则命令报错:total time input is error。 407``` 408 409**使用示例** 410```bash 411# 模拟触控笔从(100, 150)长按500ms后开始拖拽并在1100ms后拖动到(500, 300)释放。 412uinput -S -g 100 150 500 300 500 1100 413``` 414 415### 设置触控笔事件间隔 416设置触控笔事件的程序间隔,以ms为单位。需与其它触控笔事件命令搭配使用,否则此命令无效。 417 418**命令** 419```bash 420uinput -S -i <time> 421uinput --stylus --interval <time> 422 423# <time>间隔时间,单位:ms,取值范围:[1,15000],仅支持整数。 424``` 425 426**使用示例** 427```bash 428# 模拟触控笔在(100, 100)位置按下后,间隔500ms后在(100, 100)位置抬起。 429uinput -S -d 100 100 -i 500 -u 100 100 430``` 431 432## 触摸事件 433 434模拟手指触摸点击、滑动等。 435 436### 触摸按下事件 437模拟手指触摸在(dx dy)按下,建议与触摸抬起事件搭配使用,确保事件闭环。 438 439**命令** 440```bash 441uinput -T -d <dx> <dy> 442uinput --touch --down <dx> <dy> 443 444# <dx> <dy>以屏幕左上角为原点的相对坐标系的位置坐标。 445``` 446 447### 触摸抬起事件 448模拟手指触摸在(dx dy)抬起,建议与触摸按下事件搭配使用,确保事件闭环。 449 450**命令** 451```bash 452uinput -T -u <dx> <dy> 453uinput --touch --up <dx> <dy> 454 455# <dx> <dy>以屏幕左上角为原点的相对坐标系的位置坐标。 456``` 457 458**使用示例** 459```bash 460# 模拟手指触摸在(100, 100)位置按下并抬起。 461uinput -T -d 100 100 -u 100 100 462``` 463 464### 触摸移动事件 465模拟手指触摸从(dx1, dy1)按下在指定时间内移动到(dx2, dy2)后抬起,最多支持三指同时移动。 466 467**命令** 468```bash 469uinput -T -m <dx1> <dy1> <dx2> <dy2> [-k keep time] [smooth time] 470uinput --touch --move <dx1> <dy1> <dx2> <dy2> [-k keep time] [smooth time] 471 472# <dx1> <dy1>触摸移动起点以屏幕左上角为原点的相对坐标系的位置坐标。 473# <dx2> <dy2>触摸移动终点以屏幕左上角为原点的相对坐标系的位置坐标。 474# [-k keep time]按下保持时间,可选参数,单位:ms,默认值为0,取值范围:[0,60000],仅支持整数。 475# [smooth time]移动时间,可选参数,单位:ms,默认值为1000,取值范围:[1,15000],仅支持整数。 476``` 477 478**使用示例** 479```bash 480# 模拟手指触摸从(100, 1000)按下,花费1000ms移动到(100, 2000)后,保持按下1000ms后抬起。 481uinput -T -m 100 1000 100 2000 -k 1000 1000 482 483# 模拟三指滑动,第一根手指触摸按下从(300, 900)移动到(300, 2000),第二根手指触摸按下从(600, 900)移动到(600, 2000),第三根手指触摸按下从(900, 900)移动到(900, 2000),移动总时长为200ms,移动结束后手指在屏幕停顿1000m后再抬起。 484uinput -T -m 300 900 300 2000 600 900 600 2000 900 900 900 2000 -k 1000 200 485``` 486 487### 触摸单击事件 488模拟手指触摸在(dx, dy)位置单击。 489 490**命令** 491```bash 492uinput -T -c <dx> <dy> [click interval] 493uinput --touch --click <dx> <dy> [click interval] 494 495# <dx> <dy>以屏幕左上角为原点的相对坐标系的位置坐标。 496# [click interval]点击间隔时间,可选参数,单位:ms,默认值为100,取值范围:[1,450],仅支持整数。 497``` 498 499**使用示例** 500```bash 501# 模拟手指触摸在(100, 100)位置单击。 502uinput -T -c 100 100 503``` 504 505### 触摸拖拽事件 506模拟手指触摸拖拽。 507 508**命令** 509```bash 510uinput -T -g <dx1> <dy1> <dx2> <dy2> [press time] [total time] 511uinput --touch --drag <dx1> <dy1> <dx2> <dy2> [press time] [total time] 512 513# <dx1> <dy1>触摸拖拽起点以屏幕左上角为原点的相对坐标系的位置坐标。 514# <dx2> <dy2>触摸拖拽终点以屏幕左上角为原点的相对坐标系的位置坐标。 515# [press time]按压时间,可选参数,单位:ms,默认值为500,取值范围:[500,14500],仅支持整数。 516# [total time]拖动时间,可选参数,单位:ms,默认值为1000,取值范围:[1000,15000],仅支持整数。[total time] - [press time]不能少于500ms,否则命令报错:total time input is error。 517``` 518 519**使用示例** 520```bash 521# 模拟手指按下从(100, 150)在1100ms拖动到(500, 300)后释放。 522uinput -T -g 100 150 500 300 500 1100 523``` 524 525### 设置触摸事件间隔 526设置触摸事件的程序间隔,以ms为单位。需与其它触摸事件命令搭配使用,否则此命令无效。 527 528**命令** 529```bash 530uinput -T -i <time> 531uinput --touch --interval <time> 532 533# <time>间隔时间,单位:ms,取值范围:[1,15000],仅支持整数。 534``` 535 536**使用示例** 537```bash 538# 模拟手指在(100, 100)位置按下后,间隔500ms后在(100, 100)位置抬起。 539uinput -T -d 100 100 -i 500 -u 100 100 540``` 541 542### 触摸屏单指关节双击事件 543模拟触摸屏单指关节双击。 544 545**命令** 546```bash 547uinput -T -k -s <dx1> <dy1> <dx2> <dy2> [interval time] 548uinput --touch --knuckle --single <dx1> <dy1> <dx2> <dy2> [interval time] 549 550# <dx1> <dy1>单指关节第一次敲击以屏幕左上角为原点的相对坐标系的位置坐标。 551# <dx2> <dy2>单指关节第二次敲击以屏幕左上角为原点的相对坐标系的位置坐标。 552# [interval time]间隔时间,可选参数,单位:ms,默认值200,取值范围:[1,250],仅支持整数。 553``` 554 555**使用示例** 556```bash 557# 模拟单指关节在(100, 100)、(100, 130)位置间隔200ms敲击。 558uinput -T -k -s 100 100 100 130 559``` 560 561### 触摸屏双指关节双击事件 562模拟触摸屏双指关节双击。 563 564**命令** 565```bash 566uinput -T -k -d <dx1> <dy1> <dx2> <dy2> [interval time] 567uinput --touch --knuckle --double <dx1> <dy1> <dx2> <dy2> [interval time] 568 569# <dx1> <dy1>第一个指关节以屏幕左上角为原点的相对坐标系的位置坐标。 570# <dx2> <dy2>第二个指关节以屏幕左上角为原点的相对坐标系的位置坐标。 571# [interval time]间隔时间,可选参数,单位:ms,默认值200,取值范围:[1,250],仅支持整数。 572``` 573 574**使用示例** 575```bash 576# 模拟双指关节分别在(100, 100)、(100, 130)位置间隔200ms敲击2次。 577uinput -T -k -d 100 100 100 130 578``` 579 580## 触控板事件 581 582### 触控板捏合事件 583模拟触控板手指捏合。 584 585**命令** 586```bash 587uinput -P -p <dx> <dy> scalePercent 588uinput --touchpad --pinch <dx> <dy> scalePercent 589 590# <dx> <dy>以屏幕左上角为原点的相对坐标系的位置坐标。 591# scalePercent收缩百分比,取值范围:[1,500]。小于100是缩小,大于100是放大。设置时要求dx大于0,dy大于等于200。此场景只支持图片缩放,调用该命令时,确保桌面上有一张图片。 592``` 593 594**使用示例** 595```bash 596# 模拟触控板手指捏合。 597uinput -P -p 100 300 89 598``` 599 600### 触控板滑动事件 601模拟触控板滑动。 602 603**命令** 604```bash 605uinput -P -s <startX> <startY> <endX> <endY> 606uinput --touchpad --swipe <startX> <startY> <endX> <endY> 607 608# <startX> <startY>触控板上报滑动手势事件的起点以屏幕左上角为原点的相对坐标系的位置坐标。 609# <endX> <endY>触控板上报滑动手势事件的终点以屏幕左上角为原点的相对坐标系的位置坐标。 610``` 611 612**使用示例** 613```bash 614# 模拟触控板三指滑动手势。 615uinput -P -s 100 1100 100 300 616``` 617 618### 触控板旋转事件 619模拟触控板旋转。 620 621当前触摸板旋转事件执行无效果。 622 623**命令** 624```bash 625uinput -P -r <rotateValue> 626uinput --touchpad --rotate <rotateValue> 627 628# <rotateValue>旋转值,单位:度(°),取值范围:[-359,359],仅支持整数。旋转角度为正值时,顺时针旋转,旋转角度为负值时,逆时针旋转。 629``` 630 631**使用示例** 632```bash 633# 模拟触控板双指旋转180°。 634uinput -P -r 180 635``` 636