# @ohos.multimodalInput.inputConsumer (Input Consumer)
The **inputConsumer** module implements listening for combination key events.
> **NOTE**
>
> - The initial APIs of this module are supported since API version 14. Newly added APIs will be marked with a superscript to indicate their earliest API version.
## Modules to Import
```js
import { inputConsumer } from '@kit.InputKit';
```
## HotkeyOptions14+
Defines shortcut key options.
**System capability**: SystemCapability.MultimodalInput.Input.InputConsumer
| Name | Type | Readable | Writable | Description |
| --------- | ------ | ------- | ------- | ------- |
| preKeys | Array<number> | Yes | No | Modifier key set (including Ctrl, Shift, and Alt). A maximum of two modifier keys are supported. There is no requirement on the sequence of modifier keys.
For example, in **Ctrl+Shift+Esc**, **Ctrl** and **Shift** are modifier keys.|
| finalKey | number | Yes | No | Modified key, which is the key other than the modifier key and meta key.
For example, in **Ctrl+Shift+Esc**, **Esc** is the modified key.|
| isRepeat | boolean | Yes | No | Whether to report repeated key events. The value **true** means to report repeated key events, and the value **false** means the opposite. The default value is **true**.|
## inputConsumer.getAllSystemHotkeys14+
getAllSystemHotkeys(): Promise<Array<HotkeyOptions>>
Obtains all system shortcut keys. This API uses a promise to return the result.
**System capability**: SystemCapability.MultimodalInput.Input.InputConsumer
**Return value**
| Parameter | Description |
| ---------- | ---------------------------------------- |
| Promise<Array<HotkeyOptions>> | Promise used to return the list of all system shortcut keys.|
**Example**
```js
inputConsumer.getAllSystemHotkeys().then((data: Array) => {
console.log(`List of system hotkeys : ${JSON.stringify(data)}`);
});
```
## inputConsumer.on('hotkeyOptions')14+
on(type: 'hotkeyChange', hotkeyOptions: HotkeyOptions, callback: Callback<HotkeyOptions>): void
Enables listening for global combination key events. This API uses an asynchronous callback to return the combination key data when a combination key event that meets the specified condition occurs.
**System capability**: SystemCapability.MultimodalInput.Input.InputConsumer
**Parameters**
| Name | Type | Mandatory | Description |
| ---------- | -------------------------- | ---- | ---------- |
| type | string | Yes | Event type. This parameter has a fixed value of **hotkeyChange**. |
| hotkeyOptions | [HotkeyOptions](#hotkeyoptions14) | Yes | Shortcut key options. |
| callback | Callback<HotkeyOptions> | Yes | Callback used to return the combination key data when a global combination key event that meets the specified condition occurs.|
**Error codes**:
For details about the error codes, see [Input Consumer Error Codes](errorcode-inputconsumer.md) and [Universal Error Codes](../errorcode-universal.md).
| Error Code | Error Message |
| ---- | --------------------- |
| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
| 4200002 | Parameter error. The hotkey has been used by the system. You can call the [inputConsumer.getAllSystemHotkeys](#inputconsumergetallsystemhotkeys14) interface to query all system hotkeys. |
| 4200003 | Parameter error. The hotkey has been subscribed to by another. |
**Example**
```js
let leftCtrlKey = 2072;
let zKey = 2042;
let hotkeyOptions: inputConsumer.HotkeyOptions = {
preKeys: [ leftCtrlKey ],
finalKey: zKey,
isRepeat: true
};
let hotkeyCallback = (hotkeyOptions: inputConsumer.HotkeyOptions) => {
console.log(`hotkeyOptions: ${JSON.stringify(hotkeyOptions)}`);
}
try {
inputConsumer.on("hotkeyChange", hotkeyOptions, hotkeyCallback);
} catch (error) {
console.log(`Subscribe failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
}
```
## inputConsumer.off('hotkeyOptions')14+
off(type: 'hotkeyChange', hotkeyOptions: HotkeyOptions, callback?: Callback<HotkeyOptions>): void
Disables listening for global combination key events.
**System capability**: SystemCapability.MultimodalInput.Input.InputConsumer
**Parameters**
| Name | Type | Mandatory | Description |
| ---------- | -------------------------- | ---- | ---------- |
| type | string | Yes | Event type. This parameter has a fixed value of **hotkeyChange**. |
| hotkeyOptions | [HotkeyOptions](#hotkeyoptions14) | Yes | Shortcut key options. |
| callback | Callback<HotkeyOptions> | No | Callback to unregister. If this parameter is not specified, listening will be disabled for all callbacks registered by the current application.|
**Error codes**:
For details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
| Error Code | Error Message |
| ---- | --------------------- |
| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. |
**Example**
```js
let leftCtrlKey = 2072;
let zKey = 2042;
// Disable listening for a single callback.
let hotkeyCallback = (hotkeyOptions: inputConsumer.HotkeyOptions) => {
console.log(`hotkeyOptions: ${JSON.stringify(hotkeyOptions)}`);
}
let hotkeyOption: inputConsumer.HotkeyOptions = {preKeys: [leftCtrlKey], finalKey: zKey, isRepeat: true};
try {
inputConsumer.on("hotkeyChange", hotkeyOption, hotkeyCallback);
inputConsumer.off("hotkeyChange", hotkeyOption, hotkeyCallback);
console.log(`Unsubscribe success`);
} catch (error) {
console.log(`Execute failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
}
```
```js
let leftCtrlKey = 2072;
let zKey = 2042;
// Disable listening for all callbacks.
let hotkeyCallback = (hotkeyOptions: inputConsumer.HotkeyOptions) => {
console.log(`hotkeyOptions: ${JSON.stringify(hotkeyOptions)}`);
}
let hotkeyOption: inputConsumer.HotkeyOptions = {preKeys: [leftCtrlKey], finalKey: zKey, isRepeat: true};
try {
inputConsumer.on("hotkeyChange", hotkeyOption, hotkeyCallback);
inputConsumer.off("hotkeyChange", hotkeyOption);
console.log(`Unsubscribe success`);
} catch (error) {
console.log(`Execute failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
}
```