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```