• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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