• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.multimodalInput.pointer (鼠标指针)
2
3<!--Kit: Input Kit-->
4<!--Subsystem: MultimodalInput-->
5<!--Owner: @zhaoxueyuan-->
6<!--Designer: @hanruofei-->
7<!--Tester: @Lyuxin-->
8<!--Adviser: @Brilliantry_Rui-->
9
10本模块提供鼠标指针管理能力,包括查询、设置鼠标指针属性。
11
12> **说明**:
13>
14> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
15
16## 导入模块
17
18```js
19import { pointer } from '@kit.InputKit';
20```
21
22## pointer.setPointerVisible
23
24setPointerVisible(visible: boolean, callback: AsyncCallback&lt;void&gt;): void
25
26设置鼠标指针显示或者隐藏,使用Callback异步回调。
27
28**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
29
30**参数**:
31
32| 参数名       | 类型                        | 必填   | 说明                                       |
33| -------- | ------------------------- | ---- | ---------------------------------------- |
34| visible  | boolean                   | 是    | 鼠标指针是否显示。true表示显示,false表示不显示。 |
35| callback | AsyncCallback&lt;void&gt; | 是    | 回调函数。 |
36
37**错误码**:
38
39以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
40
41| 错误码ID  | 错误信息             |
42| ---- | --------------------- |
43| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
44| 801  | Capability not supported. |
45
46**示例**:
47
48```js
49import { pointer } from '@kit.InputKit';
50
51@Entry
52@Component
53struct Index {
54  build() {
55    RelativeContainer() {
56      Text()
57        .onClick(() => {
58          try {
59            pointer.setPointerVisible(true, (error: Error) => {
60              if (error) {
61                console.error(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
62                return;
63              }
64              console.log(`Set pointer visible success`);
65            });
66          } catch (error) {
67            console.error(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
68          }
69        })
70    }
71  }
72}
73```
74
75## pointer.setPointerVisible
76
77setPointerVisible(visible: boolean): Promise&lt;void&gt;
78
79设置鼠标指针显示或者隐藏,使用Promise异步回调。
80
81**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
82
83**参数**:
84
85| 参数名      | 类型      | 必填   | 说明                                       |
86| ------- | ------- | ---- | ---------------------------------------- |
87| visible | boolean | 是    | 鼠标指针是否显示。true表示显示,false表示不显示。 |
88
89**返回值**:
90
91| 类型                  | 说明                  |
92| ------------------- | ------------------- |
93| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
94
95**错误码**:
96
97以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
98
99| 错误码ID  | 错误信息             |
100| ---- | --------------------- |
101| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
102| 801  | Capability not supported. |
103
104**示例**:
105
106```js
107import { pointer } from '@kit.InputKit';
108
109@Entry
110@Component
111struct Index {
112  build() {
113    RelativeContainer() {
114      Text()
115        .onClick(() => {
116          try {
117            pointer.setPointerVisible(false).then(() => {
118              console.log(`Set pointer visible success`);
119            });
120          } catch (error) {
121            console.error(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
122          }
123        })
124    }
125  }
126}
127```
128
129## pointer.setPointerVisibleSync<sup>10+</sup>
130
131setPointerVisibleSync(visible: boolean): void
132
133设置鼠标指针的显示或隐藏,使用同步方式。
134
135**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
136
137**参数**:
138
139| 参数名      | 类型      | 必填   | 说明                                       |
140| ------- | ------- | ---- | ---------------------------------------- |
141| visible | boolean | 是    | 鼠标指针是否显示。true表示显示,false表示不显示。 |
142
143**错误码**:
144
145以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
146
147| 错误码ID  | 错误信息             |
148| ---- | --------------------- |
149| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
150
151**示例**:
152
153```js
154import { pointer } from '@kit.InputKit';
155
156@Entry
157@Component
158struct Index {
159  build() {
160    RelativeContainer() {
161      Text()
162        .onClick(() => {
163          try {
164            pointer.setPointerVisibleSync(false);
165            console.log(`Set pointer visible success`);
166          } catch (error) {
167            console.error(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
168          }
169        })
170    }
171  }
172}
173```
174
175## pointer.isPointerVisible
176
177isPointerVisible(callback: AsyncCallback&lt;boolean&gt;): void
178
179获取鼠标指针显示状态,使用callback异步回调。
180
181**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
182
183**参数**:
184
185| 参数名       | 类型                           | 必填   | 说明             |
186| -------- | ---------------------------- | ---- | -------------- |
187| callback | AsyncCallback&lt;boolean&gt; | 是    | 回调函数,返回鼠标指针状态,true为显示,false为隐藏。 |
188
189**错误码**:
190
191以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
192
193| 错误码ID  | 错误信息             |
194| ---- | --------------------- |
195| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
196
197**示例**:
198
199```js
200import { pointer } from '@kit.InputKit';
201
202@Entry
203@Component
204struct Index {
205  build() {
206    RelativeContainer() {
207      Text()
208        .onClick(() => {
209          try {
210            pointer.isPointerVisible((error: Error, visible: boolean) => {
211              if (error) {
212                console.error(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
213                return;
214              }
215              console.log(`Get pointer visible success, visible: ${JSON.stringify(visible)}`);
216            });
217          } catch (error) {
218            console.error(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
219          }
220        })
221    }
222  }
223}
224```
225
226## pointer.isPointerVisible
227
228isPointerVisible(): Promise&lt;boolean&gt;
229
230获取鼠标指针显示状态,使用Promise异步回调。
231
232**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
233
234**返回值**:
235
236| 类型                     | 说明                  |
237| ---------------------- | ------------------- |
238| Promise&lt;boolean&gt; | Promise对象,返回鼠标指针状态查询结果。true代表显示状态,false代表隐藏状态。 |
239
240**示例**:
241
242```js
243import { pointer } from '@kit.InputKit';
244
245@Entry
246@Component
247struct Index {
248  build() {
249    RelativeContainer() {
250      Text()
251        .onClick(() => {
252          try {
253            pointer.isPointerVisible().then((visible: boolean) => {
254              console.log(`Get pointer visible success, visible: ${JSON.stringify(visible)}`);
255            });
256          } catch (error) {
257            console.error(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
258          }
259        })
260    }
261  }
262}
263```
264
265## pointer.isPointerVisibleSync<sup>10+</sup>
266
267isPointerVisibleSync(): boolean
268
269使用同步方式获取鼠标指针显示或者隐藏。
270
271**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
272
273**返回值**:
274
275| 类型                     | 说明                  |
276| ---------------------- | ------------------- |
277| boolean | 返回鼠标指针显示或隐藏状态。true代表显示状态,false代表隐藏状态。 |
278
279**示例**:
280
281```js
282import { pointer } from '@kit.InputKit';
283
284@Entry
285@Component
286struct Index {
287  build() {
288    RelativeContainer() {
289      Text()
290        .onClick(() => {
291          try {
292            let visible: boolean = pointer.isPointerVisibleSync();
293            console.log(`Get pointer visible success, visible: ${JSON.stringify(visible)}`);
294          } catch (error) {
295            console.error(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
296          }
297        })
298    }
299  }
300}
301```
302
303## pointer.getPointerStyle
304
305getPointerStyle(windowId: number, callback: AsyncCallback&lt;PointerStyle&gt;): void
306
307获取鼠标样式类型,使用Callback异步回调。
308
309**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
310
311**参数**:
312
313| 参数名       | 类型                                       | 必填   | 说明             |
314| -------- | ---------------------------------------- | ---- | -------------- |
315| windowId | number                                   | 是    | 窗口id。取值范围为大于等于-1的整数,取值为-1时表示全局窗口。    |
316| callback | AsyncCallback&lt;[PointerStyle](#pointerstyle)&gt; | 是    | 回调函数,返回鼠标样式类型。 |
317
318**错误码**:
319
320以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
321
322| 错误码ID  | 错误信息             |
323| ---- | --------------------- |
324| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
325
326**示例**:
327
328```js
329import { pointer } from '@kit.InputKit';
330import { BusinessError } from '@kit.BasicServicesKit';
331import { window } from '@kit.ArkUI';
332
333@Entry
334@Component
335struct Index {
336  build() {
337    RelativeContainer() {
338      Text()
339        .onClick(() => {
340          window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => {
341            if (error.code) {
342              console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error));
343              return;
344            }
345            let windowId = win.getWindowProperties().id;
346            if (windowId < 0) {
347              console.log(`Invalid windowId`);
348              return;
349            }
350            try {
351              pointer.getPointerStyle(windowId, (error: Error, style: pointer.PointerStyle) => {
352                console.log(`Get pointer style success, style: ${JSON.stringify(style)}`);
353              });
354            } catch (error) {
355              console.error(`Get pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
356            }
357          });
358        })
359    }
360  }
361}
362```
363
364## pointer.getPointerStyle
365
366getPointerStyle(windowId: number): Promise&lt;PointerStyle&gt;
367
368获取鼠标样式类型,使用Promise异步回调。
369
370**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
371
372**参数**:
373
374| 参数名     | 类型   | 必填 | 说明     |
375| -------- | ------ | ---- | -------- |
376| windowId | number | 是   | 窗口id。 |
377
378**返回值**:
379
380| 类型                                       | 说明                  |
381| ---------------------------------------- | ------------------- |
382| Promise&lt;[PointerStyle](#pointerstyle)&gt; | Promise实例,返回鼠标样式类型。 |
383
384**错误码**:
385
386以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
387
388| 错误码ID  | 错误信息             |
389| ---- | --------------------- |
390| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
391
392**示例**:
393
394```js
395import { pointer } from '@kit.InputKit';
396import { BusinessError } from '@kit.BasicServicesKit';
397import { window } from '@kit.ArkUI';
398
399@Entry
400@Component
401struct Index {
402  build() {
403    RelativeContainer() {
404      Text()
405        .onClick(() => {
406          window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => {
407            if (error.code) {
408              console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error));
409              return;
410            }
411            let windowId = win.getWindowProperties().id;
412            if (windowId < 0) {
413              console.log(`Invalid windowId`);
414              return;
415            }
416            try {
417              pointer.getPointerStyle(windowId).then((style: pointer.PointerStyle) => {
418                console.log(`Get pointer style success, style: ${JSON.stringify(style)}`);
419              });
420            } catch (error) {
421              console.error(`Get pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
422            }
423          });
424        })
425    }
426  }
427}
428```
429
430## pointer.getPointerStyleSync<sup>10+</sup>
431
432getPointerStyleSync(windowId: number): PointerStyle
433
434查询鼠标样式类型,如向东箭头、向西箭头、向南箭头、向北箭头等。
435
436**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
437
438**参数**:
439
440| 参数名     | 类型   | 必填 | 说明     |
441| -------- | ------ | ---- | -------- |
442| windowId | number | 是   | 窗口id。<br>默认值为-1,表示获取全局的鼠标样式。 |
443
444**返回值**:
445
446| 类型                                       | 说明                  |
447| ---------------------------------------- | ------------------- |
448| [PointerStyle](#pointerstyle) | 返回鼠标样式类型。 |
449
450**错误码**:
451
452以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
453
454| 错误码ID  | 错误信息             |
455| ---- | --------------------- |
456| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
457
458**示例**:
459
460```js
461import { pointer } from '@kit.InputKit';
462
463@Entry
464@Component
465struct Index {
466  build() {
467    RelativeContainer() {
468      Text()
469        .onClick(() => {
470          let windowId = -1;
471          try {
472            let style: pointer.PointerStyle = pointer.getPointerStyleSync(windowId);
473            console.log(`Get pointer style success, style: ${JSON.stringify(style)}`);
474          } catch (error) {
475            console.error(`Get pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
476          }
477        })
478    }
479  }
480}
481```
482
483## pointer.setPointerStyle
484
485setPointerStyle(windowId: number, pointerStyle: PointerStyle, callback: AsyncCallback&lt;void&gt;): void
486
487设置鼠标样式类型,使用Callback异步回调。
488
489**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
490
491**参数**:
492
493| 参数名           | 类型                             | 必填   | 说明                                  |
494| ------------ | ------------------------------ | ---- | ----------------------------------- |
495| windowId     | number                         | 是    | 窗口id。                          |
496| pointerStyle | [PointerStyle](#pointerstyle) | 是    | 鼠标样式。                             |
497| callback     | AsyncCallback&lt;void&gt;      | 是    | 回调函数。 |
498
499**错误码**:
500
501以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
502
503| 错误码ID  | 错误信息             |
504| ---- | --------------------- |
505| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
506
507**示例**:
508
509```js
510import { pointer } from '@kit.InputKit';
511import { BusinessError } from '@kit.BasicServicesKit';
512import { window } from '@kit.ArkUI';
513
514@Entry
515@Component
516struct Index {
517  build() {
518    RelativeContainer() {
519      Text()
520        .onClick(() => {
521          window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => {
522            if (error.code) {
523              console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error));
524              return;
525            }
526            let windowId = win.getWindowProperties().id;
527            if (windowId < 0) {
528              console.log(`Invalid windowId`);
529              return;
530            }
531            try {
532              pointer.setPointerStyle(windowId, pointer.PointerStyle.CROSS, error => {
533                console.log(`Set pointer style success`);
534              });
535            } catch (error) {
536              console.error(`Set pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
537            }
538          });
539        })
540    }
541  }
542}
543```
544## pointer.setPointerStyle
545
546setPointerStyle(windowId: number, pointerStyle: PointerStyle): Promise&lt;void&gt;
547
548设置鼠标样式类型,使用Promise异步回调。
549
550**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
551
552**参数**:
553
554| 参数名                  | 类型                             | 必填   | 说明               |
555| ------------------- | ------------------------------ | ---- | ---------------- |
556| windowId            | number                         | 是    | 窗口id。       |
557| pointerStyle        | [PointerStyle](#pointerstyle) | 是    | 鼠标样式。          |
558
559**返回值**:
560
561| 类型                  | 说明                  |
562| ------------------- | ------------------- |
563| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
564
565**错误码**:
566
567以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
568
569| 错误码ID  | 错误信息             |
570| ---- | --------------------- |
571| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
572
573**示例**:
574
575```js
576import { pointer } from '@kit.InputKit';
577import { BusinessError } from '@kit.BasicServicesKit';
578import { window } from '@kit.ArkUI';
579
580@Entry
581@Component
582struct Index {
583  build() {
584    RelativeContainer() {
585      Text()
586        .onClick(() => {
587          window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => {
588            if (error.code) {
589              console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error));
590              return;
591            }
592            let windowId = win.getWindowProperties().id;
593            if (windowId < 0) {
594              console.log(`Invalid windowId`);
595              return;
596            }
597            try {
598              pointer.setPointerStyle(windowId, pointer.PointerStyle.CROSS).then(() => {
599                console.log(`Set pointer style success`);
600              });
601            } catch (error) {
602              console.error(`Set pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
603            }
604          });
605        })
606    }
607  }
608}
609```
610
611## pointer.setPointerStyleSync<sup>10+</sup>
612
613setPointerStyleSync(windowId: number, pointerStyle: PointerStyle): void
614
615设置鼠标样式类型,使用同步方式返回结果。
616
617**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
618
619**参数**:
620
621| 参数名                  | 类型                             | 必填   | 说明               |
622| ------------------- | ------------------------------ | ---- | ---------------- |
623| windowId            | number                         | 是    | 窗口id。       |
624| pointerStyle        | [PointerStyle](#pointerstyle) | 是    | 鼠标样式。          |
625
626**错误码**:
627
628以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
629
630| 错误码ID  | 错误信息             |
631| ---- | --------------------- |
632| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
633
634**示例**:
635```js
636import { pointer } from '@kit.InputKit';
637import { BusinessError } from '@kit.BasicServicesKit';
638import { window } from '@kit.ArkUI';
639
640@Entry
641@Component
642struct Index {
643  build() {
644    RelativeContainer() {
645      Text()
646        .onClick(() => {
647          window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => {
648            if (error.code) {
649              console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error));
650              return;
651            }
652            let windowId = win.getWindowProperties().id;
653            if (windowId < 0) {
654              console.log(`Invalid windowId`);
655              return;
656            }
657            try {
658              pointer.setPointerStyleSync(windowId, pointer.PointerStyle.CROSS);
659              console.log(`Set pointer style success`);
660            } catch (error) {
661              console.error(`getPointerSize failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
662            }
663          });
664        })
665    }
666  }
667}
668```
669
670## PrimaryButton<sup>10+</sup>
671
672鼠标主键类型。
673
674**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
675
676| 名称                               | 值    | 说明     |
677| -------------------------------- | ---- | ------ |
678| LEFT                          | 0    | 鼠标左键。     |
679| RIGHT                             | 1    | 鼠标右键。   |
680
681## RightClickType<sup>10+</sup>
682
683右键菜单的触发方式。
684
685**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
686
687| 名称                               | 值    | 说明     |
688| -------------------------------- | ---- | ------ |
689| TOUCHPAD_RIGHT_BUTTON            | 1    |按压触控板右键区域。 |
690| TOUCHPAD_LEFT_BUTTON            | 2    |按压触控板左键区域。 |
691| TOUCHPAD_TWO_FINGER_TAP         | 3    |双指轻击或双指按压触控板。|
692| TOUCHPAD_TWO_FINGER_TAP_OR_RIGHT_BUTTON<sup>20+</sup>       | 4    |双指轻击或双指按压触控板、或按压触控板右键区域。|
693| TOUCHPAD_TWO_FINGER_TAP_OR_LEFT_BUTTON<sup>20+</sup>         | 5    |双指轻击或双指按压触控板、或按压触控板左键区域。|
694
695## PointerStyle
696
697鼠标样式类型。
698
699**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
700
701| 名称                               | 值    | 说明     |图示 |
702| -------------------------------- | ---- | ------ |------ |
703| DEFAULT                          | 0    | 默认     |![Default.png](./figures/Default.png)|
704| EAST                             | 1    | 向东箭头   |![East.png](./figures/East.png)|
705| WEST                             | 2    | 向西箭头   |![West.png](./figures/West.png)|
706| SOUTH                            | 3    | 向南箭头   |![South.png](./figures/South.png)|
707| NORTH                            | 4    | 向北箭头   |![North.png](./figures/North.png)|
708| WEST_EAST                        | 5    | 向西东箭头  |![West_East.png](./figures/West_East.png)|
709| NORTH_SOUTH                      | 6    | 向北南箭头  |![North_South.png](./figures/North_South.png)|
710| NORTH_EAST                       | 7    | 向东北箭头  |![North_East.png](./figures/North_East.png)|
711| NORTH_WEST                       | 8    | 向西北箭头  |![North_West.png](./figures/North_West.png)|
712| SOUTH_EAST                       | 9    | 向东南箭头  |![South_East.png](./figures/South_East.png)|
713| SOUTH_WEST                       | 10   | 向西南箭头  |![South_West.png](./figures/South_West.png)|
714| NORTH_EAST_SOUTH_WEST            | 11   | 东北西南调整 |![North_East_South_West.png](./figures/North_East_South_West.png)|
715| NORTH_WEST_SOUTH_EAST            | 12   | 西北东南调整 |![North_West_South_East.png](./figures/North_West_South_East.png)|
716| CROSS                            | 13   | 准确选择   |![Cross.png](./figures/Cross.png)|
717| CURSOR_COPY                      | 14   | 拷贝     |![Copy.png](./figures/Copy.png)|
718| CURSOR_FORBID                    | 15   | 不可用    |![Forbid.png](./figures/Forbid.png)|
719| COLOR_SUCKER                     | 16   | 滴管     |![Colorsucker.png](./figures/Colorsucker.png)|
720| HAND_GRABBING                    | 17   | 并拢的手   |![Hand_Grabbing.png](./figures/Hand_Grabbing.png)|
721| HAND_OPEN                        | 18   | 张开的手   |![Hand_Open.png](./figures/Hand_Open.png)|
722| HAND_POINTING                    | 19   | 手形指针   |![Hand_Poniting.png](./figures/Hand_Pointing.png)|
723| HELP                             | 20   | 帮助选择   |![Help.png](./figures/Help.png)|
724| MOVE                             | 21   | 移动     |![Move.png](./figures/Move.png)|
725| RESIZE_LEFT_RIGHT                | 22   | 内部左右调整 |![Resize_Left_Right.png](./figures/Resize_Left_Right.png)|
726| RESIZE_UP_DOWN                   | 23   | 内部上下调整 |![Resize_Up_Down.png](./figures/Resize_Up_Down.png)|
727| SCREENSHOT_CHOOSE                | 24   | 截图十字准星 |![Screenshot_Cross.png](./figures/Screenshot_Cross.png)|
728| SCREENSHOT_CURSOR                | 25   | 截图     |![Screenshot_Cursor.png](./figures/Screenshot_Cursor.png)|
729| TEXT_CURSOR                      | 26   | 文本选择   |![Text_Cursor.png](./figures/Text_Cursor.png)|
730| ZOOM_IN                          | 27   | 放大     |![Zoom_In.png](./figures/Zoom_In.png)|
731| ZOOM_OUT                         | 28   | 缩小     |![Zoom_Out.png](./figures/Zoom_Out.png)|
732| MIDDLE_BTN_EAST                  | 29   | 向东滚动   |![MID_Btn_East.png](./figures/MID_Btn_East.png)|
733| MIDDLE_BTN_WEST                  | 30   | 向西滚动   |![MID_Btn_West.png](./figures/MID_Btn_West.png)|
734| MIDDLE_BTN_SOUTH                 | 31   | 向南滚动   | ![MID_Btn_South.png](./figures/MID_Btn_South.png)            |
735| MIDDLE_BTN_NORTH                 | 32   | 向北滚动   |![MID_Btn_North.png](./figures/MID_Btn_North.png)|
736| MIDDLE_BTN_NORTH_SOUTH           | 33   | 向南北滚动  |![MID_Btn_North_South.png](./figures/MID_Btn_North_South.png)|
737| MIDDLE_BTN_NORTH_EAST            | 34   | 向东北滚动  |![MID_Btn_North_East.png](./figures/MID_Btn_North_East.png)|
738| MIDDLE_BTN_NORTH_WEST            | 35   | 向西北滚动  |![MID_Btn_North_West.png](./figures/MID_Btn_North_West.png)|
739| MIDDLE_BTN_SOUTH_EAST            | 36   | 向东南滚动  |![MID_Btn_South_East.png](./figures/MID_Btn_South_East.png)|
740| MIDDLE_BTN_SOUTH_WEST            | 37   | 向西南滚动  |![MID_Btn_South_West.png](./figures/MID_Btn_South_West.png)|
741| MIDDLE_BTN_NORTH_SOUTH_WEST_EAST | 38   | 四向锥形移动 |![MID_Btn_North_South_West_East.png](./figures/MID_Btn_North_South_West_East.png)|
742| HORIZONTAL_TEXT_CURSOR<sup>10+</sup> | 39 | 垂直文本选择 |![Horizontal_Text_Cursor.png](./figures/Horizontal_Text_Cursor.png)|
743| CURSOR_CROSS<sup>10+</sup> | 40 | 十字光标 |![Cursor_Cross.png](./figures/Cursor_Cross.png)|
744| CURSOR_CIRCLE<sup>10+</sup> | 41 | 圆形光标 |![Cursor_Circle.png](./figures/Cursor_Circle.png)|
745| LOADING<sup>10+</sup> | 42 | 正在载入动画光标 |![Loading.png](./figures/Loading.png)<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
746| RUNNING<sup>10+</sup> | 43 | 后台运行中动画光标 |![Running.png](./figures/Running.png)<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
747| MIDDLE_BTN_EAST_WEST<sup>18+</sup>          | 44   | 向东西滚动 |![MID_Btn_East_West.png](./figures/MID_Btn_East_West.png)|
748| SCREENRECORDER_CURSOR<sup>20+</sup>         | 48   | 录屏光标  |![ScreenRecorder_Cursor.png](./figures/ScreenRecorder_Cursor.png)|
749
750## pointer.setCustomCursor<sup>11+</sup>
751
752setCustomCursor(windowId: number, pixelMap: image.PixelMap, focusX?: number, focusY?: number): Promise&lt;void&gt;
753
754设置自定义光标样式,使用Promise异步回调。
755
756**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
757
758**参数**:
759
760| 参数名    | 类型     | 必填   | 说明                                  |
761| ----- | ------ | ---- | ----------------------------------- |
762| windowId  | number  | 是    | 窗口id。                          |
763| pixelMap  | [image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md) | 是    | 自定义光标资源。 |
764| focusX  | number | 否    | 自定义光标焦点x,取值范围:大于等于0,默认为0。 |
765| focusY  | number | 否    | 自定义光标焦点y,取值范围:大于等于0,默认为0。 |
766
767**返回值**:
768
769| 类型                  | 说明               |
770| ------------------- | ---------------- |
771| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
772
773**错误码**:
774
775以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
776
777| 错误码ID  | 错误信息             |
778| ---- | --------------------- |
779| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
780
781**示例**:
782
783```js
784import { pointer } from '@kit.InputKit';
785import { image } from '@kit.ImageKit';
786import { BusinessError } from '@kit.BasicServicesKit';
787import { window } from '@kit.ArkUI';
788
789@Entry
790@Component
791struct Index {
792  build() {
793    RelativeContainer() {
794      Text()
795        .onClick(() => {
796          // app_icon为示例资源,请开发者根据实际需求配置资源文件。
797          this.getUIContext()?.getHostContext()?.resourceManager.getMediaContent(
798            $r("app.media.app_icon").id, (error: BusinessError, svgFileData: Uint8Array) => {
799              const svgBuffer: ArrayBuffer = svgFileData.buffer.slice(0);
800              let svgImageSource: image.ImageSource = image.createImageSource(svgBuffer);
801              let svgDecodingOptions: image.DecodingOptions = {desiredSize: { width: 50, height:50 }};
802              svgImageSource.createPixelMap(svgDecodingOptions).then((pixelMap) => {
803                window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => {
804                  let windowId = win.getWindowProperties().id;
805                  try {
806                    pointer.setCustomCursor(windowId, pixelMap).then(() => {
807                      console.log(`setCustomCursor success`);
808                    });
809                  } catch (error) {
810                    console.error(`setCustomCursor failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
811                  }
812                });
813              });
814          });
815        })
816    }
817  }
818}
819```
820## CustomCursor<sup>15+</sup>
821
822自定义光标资源。
823
824**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
825| 名称     | 类型     | 只读     | 可选     | 说明     |
826| -------- | ------- | -------- | -------- | ------- |
827| pixelMap  | [image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md) | 否   | 否   | 自定义光标。最小限制为资源图本身的最小限制。最大限制为256 x 256px。 |
828| focusX  | number | 否   | 是   | 自定义光标焦点的水平坐标。该坐标受自定义光标大小的限制。最小值为0,最大值为资源图的宽度最大值,该参数缺省时默认为0。 |
829| focusY  | number | 否   | 是   | 自定义光标焦点的垂直坐标。该坐标受自定义光标大小的限制。最小值为0,最大值为资源图的高度最大值,该参数缺省时默认为0。 |
830
831## CursorConfig<sup>15+</sup>
832
833自定义光标配置。
834
835**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
836
837| 名称     | 类型     | 只读     | 可选     | 说明     |
838| -------- | ------- | -------- | -------- | ------- |
839| followSystem  | boolean  | 否   | 否   | 是否根据系统设置调整光标大小。false表示使用自定义光标样式大小,true表示根据系统设置调整光标大小,可调整范围为:[光标资源图大小,256×256]。 |
840
841## pointer.setCustomCursor<sup>15+</sup>
842
843setCustomCursor(windowId: number, cursor: CustomCursor, config: CursorConfig): Promise&lt;void&gt;
844
845设置自定义光标样式,使用Promise异步回调。
846应用窗口布局改变、热区切换、页面跳转、光标移出再回到窗口、光标在窗口不同区域移动,以上场景可能导致光标切换回系统样式,需要开发者重新设置光标样式。
847
848**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
849
850**参数**:
851
852| 参数名    | 类型    | 必填    | 说明    |
853| -------- | -------- | -------- | -------- |
854| windowId  | number  | 是    | 窗口id。                          |
855| cursor  | [CustomCursor](js-apis-pointer.md#customcursor15) | 是    | 自定义光标资源。 |
856| config  | [CursorConfig](js-apis-pointer.md#cursorconfig15) | 是    | 自定义光标配置,用于配置是否根据系统设置调整光标大小。如果CursorConfig中followSystem设置为true,则光标大小的可调整范围为:[光标资源图大小,256×256]。 |
857
858**返回值**:
859
860| 类型                  | 说明               |
861| ------------------- | ---------------- |
862| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
863
864**错误码**:
865
866以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[输入设备错误码](./errorcode-inputdevice.md)。
867
868| 错误码ID  | 错误信息             |
869| ---- | --------------------- |
870| 401  | Parameter error. Possible causes: 1. Abnormal windowId parameter passed in. 2. Abnormal pixelMap parameter passed in; 3. Abnormal focusX parameter passed in.4. Abnormal focusY parameter passed in. |
871| 26500001 | Invalid windowId. Possible causes: The window id does not belong to the current process. |
872
873**示例**:
874
875```js
876import { pointer } from '@kit.InputKit';
877import { image } from '@kit.ImageKit';
878import { BusinessError } from '@kit.BasicServicesKit';
879import { window } from '@kit.ArkUI';
880
881@Entry
882@Component
883struct Index {
884  build() {
885    RelativeContainer() {
886      Text()
887        .onClick(() => {
888          // app_icon为示例资源,请开发者根据实际需求配置资源文件。
889          this.getUIContext()?.getHostContext()?.resourceManager.getMediaContent(
890            $r("app.media.app_icon").id, (error: BusinessError, svgFileData: Uint8Array) => {
891              const svgBuffer: ArrayBuffer = svgFileData.buffer.slice(0);
892              let svgImageSource: image.ImageSource = image.createImageSource(svgBuffer);
893              let svgDecodingOptions: image.DecodingOptions = {desiredSize: { width: 50, height:50 }};
894              svgImageSource.createPixelMap(svgDecodingOptions).then((pixelMap) => {
895                window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => {
896                  let windowId = win.getWindowProperties().id;
897                  try {
898                    pointer.setCustomCursor(windowId, {pixelMap: pixelMap, focusX: 25, focusY: 25}, {followSystem: false}).then(() => {
899                      console.log(`setCustomCursor success`);
900                    });
901                  } catch (error) {
902                    console.error(`setCustomCursor failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
903                  }
904                });
905              });
906          });
907        })
908    }
909  }
910}
911```
912
913## pointer.setCustomCursorSync<sup>11+</sup>
914
915setCustomCursorSync(windowId: number, pixelMap: image.PixelMap, focusX?: number, focusY?: number): void
916
917设置自定义光标样式,使用同步方式进行设置。
918
919**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
920
921**参数**:
922
923| 参数名    | 类型     | 必填   | 说明                                  |
924| ----- | ------ | ---- | ----------------------------------- |
925| windowId  | number  | 是    | 窗口id。取值为大于0的整数。                          |
926| pixelMap  | [image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md) | 是    | 自定义光标资源。 |
927| focusX  | number | 否    | 自定义光标焦点x,取值范围:大于等于0,默认为0。 |
928| focusY  | number | 否    | 自定义光标焦点y,取值范围:大于等于0,默认为0。 |
929
930**错误码**:
931
932以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
933
934| 错误码ID  | 错误信息             |
935| ---- | --------------------- |
936| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
937
938**示例**:
939
940```js
941import { pointer } from '@kit.InputKit';
942import { image } from '@kit.ImageKit';
943import { BusinessError } from '@kit.BasicServicesKit';
944import { window } from '@kit.ArkUI';
945
946@Entry
947@Component
948struct Index {
949  build() {
950    RelativeContainer() {
951      Text()
952        .onClick(() => {
953          // app_icon为示例资源,请开发者根据实际需求配置资源文件。
954          this.getUIContext()?.getHostContext()?.resourceManager.getMediaContent(
955            $r("app.media.app_icon").id, (error: BusinessError, svgFileData: Uint8Array) => {
956              const svgBuffer: ArrayBuffer = svgFileData.buffer.slice(0);
957              let svgImageSource: image.ImageSource = image.createImageSource(svgBuffer);
958              let svgDecodingOptions: image.DecodingOptions = {desiredSize: { width: 50, height:50 }};
959              svgImageSource.createPixelMap(svgDecodingOptions).then((pixelMap) => {
960                window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => {
961                  let windowId = win.getWindowProperties().id;
962                  try {
963                    pointer.setCustomCursorSync(windowId, pixelMap, 25, 25);
964                    console.log(`setCustomCursorSync success`);
965                  } catch (error) {
966                    console.error(`setCustomCursorSync failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
967                  }
968                });
969              });
970          });
971        })
972    }
973  }
974}
975```