2017-08-04 527 views
0

我在Windows 10上使用InjectTouchInput() API从单独的数字转换器注入触摸事件。这效果很好(多点触摸等)。这里有很多使用API​​的例子,即使用指针类型PT_TOUCH,包括一个from Microsoft,所以根据我的需要定制它们并不难。如何在Windows 10上使用InjectTouchInput()和PT_PEN从数字转换器注入笔输入

但是,我还没有找到任何使用其他指针类型的例子,尤其是PT_PEN - 当数字转换器给我输入笔时我需要这种指针。 (我也很想在PT_MOUSE,主要是为了避免使用SendInput()mouse_event()

每当我打电话InjectTouchInput()PT_PEN,它失败ERROR_INVALID_PARAMETER。我已经尝试了很多字段组合,但没有任何内容(到目前为止)能够正常工作。 MSDN文档没有描述如何为PT_PEN做(但它不描述太多了PT_TOUCH,但至少有一个样品),所以这是相当困难的知道哪些字段应该设置,哪些应该是忽略,任何特定的操作顺序等。我一直在搜网,但找不到PT_PEN的使用示例。

是否有人有示例代码或知道在哪里可以找到任何,这里有用的文档所处位置的知识,或者知道如何InjectTouchInput()应该用于PT_PEN(和PT_MOUSE)?

回答

0

事实证明,InjectTouchInput()确实只用于触摸输入 - 不是笔,鼠标或通用指针。

你可能会说,这是显而易见的,因为你通过POINTER_TOUCH_INFO条目到API的数组,但产生了困惑,因为POINTER_TOUCH_INFO文档(和所有后续文档)的描述大多是从别人看到的内容,谁解释内容,他给出的,而不是内容,他正试图设置,POINTER_INFO(在POINTER_TOUCH_INFO第一个元素)可以指定PT_POINTERPT_TOUCHPT_PENPT_MOUSEPT_TOUCHPAD指针类型,所以感觉有点自然地想到“等待,我可以注入所有这些不同类型的指针!

当然,所有的指针类型尽管有POINTER_INFO的共同点,但它们的参数略有不同。例如,有orientationpressurePT_TOUCH(在POINTER_TOUCH_INFO),但tiltXtiltYrotation,和用于pressurePT_PEN(在POINTER_PEN_INFO);但由于指针类型始终是结构中的第一个字段,因此很容易确定哪些信息是相关的。

可以InjectTouchInput()需要POINTER_PEN_INFO而不是POINTER_TOUCH_INFO?不,它不能 - 我试过了,以防万一它起作用。

微软似乎错失了一个机会,使API从一开始就变得更通用,并接受所有支持的指针类型,而不仅限于触摸输入。考虑到有一个POINTER_PEN_INFO结构(我还没有找到除POINTER_TOUCH_INFO之外的其他指针类型的结构),至少笔笔记应该是直截了当的。

通过this thread 2014年中途是提到,“没有[...]为笔注射 API”所以对于注射笔驱动程序仍然需要,事情还没有从那以后改善, 。话虽如此,Windows UI自动化API可以显然注入所有的指针类型(以及一个游戏手柄来启动),但只有Windows 10周年纪念版支持(并且我没有尝试过)。