Orisumi

Input Event

一次键盘或鼠标事件(草案)

输入事件表达“在时刻 t 发生了一次键盘或鼠标操作”,由输入事件 Observer 形成观测。

粒度

键盘事件记的是人的按键操作。一次按下和一次释放各自形成观测内容和 Observation;长按期间系统自动重复的按下被过滤掉,松开后再按下才是下一次操作。

例如按住 A 一秒,按下时记一条 keyDown,松开时记一条 keyUp。按 Shift+A 时,Shift 和 A 的按下、释放各记一条,组合键本身不单独成为事件。

身份

每次按下、每次释放都有自己的身份和 Observation。时间戳相同的不同事件分别记下。

引用

目前没有引用。与设备的关联尚未确定。

事实时间

时间点型的 Observation:startAt = endAt = t,表示方式见 Observation · 事实时间。

EntitySchema

项目值
SchemaId019e1bbb-ec00-73ec-bf49-5a26143f9c12
显示名称输入事件
说明记录人的一次键盘或鼠标操作事件;键盘按下与释放分别记录,过滤长按自动重复,可按用户设置携带具体按键。Observation 表达事件发生的时间点。
资源名input-events
字段类型必填可空含义
kindstring是否事件的类别,取值见下表
keystring否否键盘事件按的键。关闭具体按键记录时省略;鼠标事件没有这个字段
kind含义
keyDown键盘按下
keyUp键盘释放
mouseDown鼠标按钮按下
mouseUp鼠标按钮释放
mouseMove鼠标移动
mouseWheel鼠标滚动

kind 是跨平台的类别,系统 API 的常量留在实现中。key 表示按的是哪个键,它的跨平台编码尚未确定。哪种 kind 使用哪些字段,由业务代码遵守;EntitySchema 只声明字段的类型、必填和可空。

EntitySchema 的内容:

{
	"displayName": "输入事件",
	"description": "记录人的一次键盘或鼠标操作事件;键盘按下与释放分别记录,过滤长按自动重复,可按用户设置携带具体按键。Observation 表达事件发生的时间点。",
	"resourceName": "input-events",
	"fields": {
		"kind": {
			"type": "string",
			"required": true,
			"nullable": false
		},
		"key": {
			"type": "string",
			"required": false,
			"nullable": false
		}
	}
}

具体按键

是否记下具体按键,由输入事件 Observer 的用户设置决定,默认开启。开启时,按下和释放事件都带有 key;关闭时,事件仍有类别和对应的 Observation,只是省略 key。这个开关是采集设置,不是输入事件的字段。

key 记的是按了哪个键,与最终输入的文字无关。例如 Shift 和 A 各记各的键,“大写 A”这个结果不记;输入法最终生成的文字也不记。

示例

开启具体按键记录时,按下事件带有 key。A 键的编码尚未确定,下例用占位文字代替:

{
  "references": {},
  "properties": { "kind": "keyDown", "key": "<A 键标识>" }
}

关闭具体按键记录时,省略 key:

{
  "references": {},
  "properties": { "kind": "keyDown" }
}

待定

  • 具体按键的跨平台编码。
  • 鼠标采集哪些类别;是否保留按钮、坐标或滚动量。
  • 事实时间取系统的事件时间,还是 Observer 收到事件的时刻,以及精度换算。
  • 鼠标移动和滚动的粒度。

贡献者

页面历史