POINTER_INFO 结构 (winuser.h)
包含所有指针类型通用的基本指针信息。 应用程序可以使用 GetPointerInfo、 GetPointerFrameInfo、 GetPointerInfoHistory 和 GetPointerFrameInfoHistory 函数检索此信息。
语法
typedef struct tagPOINTER_INFO {
POINTER_INPUT_TYPE pointerType;
UINT32 pointerId;
UINT32 frameId;
POINTER_FLAGS pointerFlags;
HANDLE sourceDevice;
HWND hwndTarget;
POINT ptPixelLocation;
POINT ptHimetricLocation;
POINT ptPixelLocationRaw;
POINT ptHimetricLocationRaw;
DWORD dwTime;
UINT32 historyCount;
INT32 InputData;
DWORD dwKeyStates;
UINT64 PerformanceCount;
POINTER_BUTTON_CHANGE_TYPE ButtonChangeType;
} POINTER_INFO;
成员
pointerType
POINTER_INPUT_TYPE 枚举中的值,该值指定指针类型。
pointerId
类型: UINT32
在指针生存期内唯一标识指针的标识符。 指针在首次检测到时就存在,当指针超出检测范围时,指针将结束其存在。 请注意,如果某个物理实体 (手指或笔) 超出检测范围,然后返回待检测范围,则会将其视为新指针,并可能分配新的指针标识符。
frameId
类型: UINT32
源设备在单个输入帧中报告更新的多个指针通用的标识符。 例如,并行模式多点触控数字化器可能会在单个更新中向系统报告多个触摸触点的位置。
请注意,当输入报告给系统时,所有设备中的所有指针都会分配帧标识符。 因此,此字段在窗口接收的一系列消息中可能不包含严格顺序的值。 但是,对于单个设备在同一输入帧中报告的所有输入更新,此字段将包含相同的数值。
pointerFlags
类型: POINTER_FLAGS
可以是指针标志常量中的 标志 的任何合理组合。
sourceDevice
类型: 句柄
可用于调用原始输入设备 API 和数字化器设备 API 的源设备的句柄。
hwndTarget
类型:HWND
此消息的目标窗口。 如果捕获指针(由于在此窗口上进行了接触而隐式捕获,或者显式使用指针捕获 API),则这是捕获窗口。 如果指针未捕获,则这是生成此消息时指针所在的窗口。
ptPixelLocation
类型: POINT
指针的预测屏幕坐标(以像素为单位)。
预测值基于数字化器报告的指针位置和指针的运动。 这种更正可以补偿由于感知和处理数字化器上指针位置的固有延迟而导致的视觉延迟。 这适用于 PT_TOUCH 类型的指针。 对于其他指针类型,预测值将与非预测值相同, (请参阅 ptPixelLocationRaw) 。
ptHimetricLocation
类型: POINT
指针的预测屏幕坐标(以 HIMETRIC 单位为单位)。
预测值基于数字化器报告的指针位置和指针的运动。 这种更正可以补偿由于感知和处理数字化器上指针位置的固有延迟而导致的视觉延迟。 这适用于 PT_TOUCH 类型的指针。 对于其他指针类型,预测值将与非预测值相同, (请参阅 ptHimetricLocationRaw) 。
ptPixelLocationRaw
类型: POINT
指针的屏幕坐标(以像素为单位)。 有关调整后的屏幕坐标,请参阅 ptPixelLocation。
ptHimetricLocationRaw
类型: POINT
指针的屏幕坐标(以 HIMETRIC 为单位)。 有关调整后的屏幕坐标,请参阅 ptHimetricLocation。
dwTime
类型:DWORD
0 或消息的时间戳,基于收到消息时的系统时钟周期计数。
应用程序可以在 dwTime 或 PerformanceCount 中指定输入时间戳。 该值不能比注入线程的当前时钟周期计数或 QueryPerformanceCount (QPC) 值更新。 为帧注入时间戳后,所有后续帧都必须包含时间戳,直到帧中的所有触点都进入 UP 状态。 还必须为联系人数组中的第一个元素提供自定义时间戳值。 忽略第一个元素后的时间戳值。 自定义时间戳值必须在每个注入帧中递增。
指定 PerformanceCount 时,时间戳将在实际注入时转换为当前时间(分辨率为 0.1 毫秒)。 如果自定义 PerformanceCount 导致与上一次注入相同的 0.1 毫秒窗口,则返回 ERROR_NOT_READY ,并且不会发生注入。 虽然注入不会立即因错误而失效,但下一次成功的注入必须具有至少 0.1 毫秒的 PerformanceCount 值,该值与以前成功的注入相比至少为 0.1 毫秒。 如果使用 dwTime ,则也是如此。
如果在 InjectTouchInput 中同时指定了 dwTime 和 PerformanceCount,则返回ERROR_INVALID_PARAMETER。
注入开始后,InjectTouchInput 无法在 dwTime 和 PerformanceCount 之间切换。
如果未指定 dwTime 和 PerformanceCount,InjectTouchInput 将根据调用的计时分配时间戳。 如果 InjectTouchInput 调用重复间隔小于 0.1 毫秒,可能会返回ERROR_NOT_READY。 此错误不会立即使输入失效,但注入应用程序需要再次重试同一帧才能成功注入。
historyCount
类型: UINT32
合并到此消息中的输入计数。 此计数与调用 GetPointerInfoHistory 可返回的条目总数匹配。 如果未合并,则消息表示的单个输入的此计数为 1。
InputData
dwKeyStates
类型:DWORD
指示在生成输入时按下了哪些键盘修饰键。 可以是零,也可以是 修饰键状态中以下值的组合。
POINTER_MOD_SHIFT - 按下 SHIFT 键。
POINTER_MOD_CTRL - 按下了 CTRL 键。
使用 GetKeyState。
PerformanceCount
类型: UINT64
接收指针消息时高分辨率性能计数器的值 (dwTime) 的高精度 64 位替代项。 当触摸数字化器硬件支持其输入报告中的扫描时间戳信息时,可以校准该值。
ButtonChangeType
类型: POINTER_BUTTON_CHANGE_TYPE
POINTER_BUTTON_CHANGE_TYPE枚举中的值,该值指定此输入与上一个输入之间的按钮状态更改。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2012 [仅限桌面应用] |
标头 | winuser.h (包括 Windows.h) |