• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 全局快捷键开发指导
2
3## 场景介绍
4
5全局快捷键功能提供订阅全局快捷键、设置屏蔽按键拦截状态等能力。使用场景例如:当用户需要通过全局快捷键实现快捷功能时,开发者可以订阅全局快捷键,通过组合按键启用快捷功能。
6
7全局快捷键指由系统或应用定义的组合按键,系统快捷键指由系统定义的全局快捷键,应用快捷键指由应用定义的全局快捷键。
8
9## 导入模块
10
11```js
12import { inputConsumer } from '@kit.InputKit';
13```
14
15## 接口说明
16
17全局快捷键管理常用接口如下表所示,接口详细介绍请参考[ohos.multimodalInput.inputConsumer-sys文档](../../reference/apis-input-kit/js-apis-inputconsumer-sys.md)和[ohos.multimodalInput.inputConsumer文档](../../reference/apis-input-kit/js-apis-inputconsumer.md)。
18
19| 接口名称  | 描述 |
20| ------------------------------------------------------------ | -------------------------- |
21| on(type: 'key', keyOptions: KeyOptions, callback: Callback\<KeyOptions>): void | 订阅系统快捷键。 |
22| off(type: 'key', keyOptions: KeyOptions, callback?: Callback\<KeyOptions>): void | 取消订阅系统快捷键。 |
23| setShieldStatus(shieldMode: ShieldMode, isShield: boolean): void | 设置屏蔽按键拦截状态。 |
24| getShieldStatus(shieldMode: ShieldMode): boolean | 获取屏蔽按键拦截是否生效。 |
25| getAllSystemHotkeys(): Promise\<Array\<HotkeyOptions>> | 获取所有系统快捷键。 |
26| on(type: 'hotkeyChange', hotkeyOptions: HotkeyOptions, callback: Callback\<HotkeyOptions>): void | 订阅应用快捷键。 |
27| off(type: 'hotkeyChange', hotkeyOptions: HotkeyOptions, callback?: Callback\<HotkeyOptions>): void | 取消订阅应用快捷键。 |
28
29## 开发步骤
30
31特定全局快捷键的应用开启时调用[on](../../reference/apis-input-kit/js-apis-inputconsumer-sys.md#inputconsumeron)方法订阅全局快捷键,应用关闭时再用[off](../../reference/apis-input-kit/js-apis-inputconsumer-sys.md#inputconsumeroff)方法取消订阅全局快捷键。
32
33```js
34import { inputConsumer } from '@kit.InputKit';
35
36@Entry
37@Component
38struct Index {
39  build() {
40    RelativeContainer() {
41      Text()
42        .onClick(() => {
43          let leftAltKey = 2045;
44          let tabKey = 2049;
45          let callback = (keyOptions: inputConsumer.KeyOptions) => {
46            console.info(`keyOptions: ${JSON.stringify(keyOptions)}`);
47          }
48          //应用开启
49          let keyOption: inputConsumer.KeyOptions = {preKeys: [leftAltKey], finalKey: tabKey, isFinalKeyDown: true, finalKeyDownDuration: 0};
50          try {
51            inputConsumer.on("key", keyOption, callback);//订阅系统快捷键
52          } catch (error) {
53            console.error(`Execute failed, error: ${JSON.stringify(error, ["code", "message"])}`);
54          }
55          //应用关闭
56          try {
57            inputConsumer.off("key", keyOption, callback);//取消订阅系统快捷键
58            console.info(`Unsubscribe success`);
59          } catch (error) {
60            console.error(`Execute failed, error: ${JSON.stringify(error, ["code", "message"])}`);
61          }
62        })
63    }
64  }
65}
66```
67
68```js
69import { inputConsumer } from '@kit.InputKit';
70
71@Entry
72@Component
73struct Index {
74  build() {
75    RelativeContainer() {
76      Text()
77        .onClick(() => {
78          let leftCtrlKey = 2072;
79          let zKey = 2042;
80          let hotkeyCallback = (hotkeyOptions: inputConsumer.HotkeyOptions) => {
81            console.info(`keyOptions: ${JSON.stringify(hotkeyOptions)}`);
82          }
83          let hotkeyOption: inputConsumer.HotkeyOptions = {preKeys: [leftCtrlKey], finalKey: zKey, isRepeat: false};
84          //在订阅全局快捷键之前,需要先获取所有系统快捷键,查询需要订阅的快捷键是否存在于系统快捷键列表中,避免冲突
85          inputConsumer.getAllSystemHotkeys().then((data: Array<inputConsumer.HotkeyOptions>) => {//获取所有系统快捷键
86            console.info(`List of system hotkeys : ${JSON.stringify(data)}`);
87          });
88          //应用开启
89          try {
90            inputConsumer.on("hotkeyChange", hotkeyOption, hotkeyCallback);//订阅应用快捷键
91          } catch (error) {
92            console.error(`Execute failed, error: ${JSON.stringify(error, ["code", "message"])}`);
93          }
94          //应用关闭
95          try {
96            inputConsumer.off("hotkeyChange", hotkeyOption, hotkeyCallback);//取消订阅应用快捷键
97            console.info(`Unsubscribe success`);
98          } catch (error) {
99            console.error(`Execute failed, error: ${JSON.stringify(error, ["code", "message"])}`);
100          }
101        })
102    }
103  }
104}
105```