如何在Windows 10上使用带有PT_PEN的InjectTouchInput()从数字转换器注入笔输入

时间:2017-08-04 14:07:12

标签: c++ windows-10 touch pen

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

但是,我还没有找到任何使用其他指针类型的例子,特别是PT_PEN - 当数字转换器给我笔输入时我需要它。 (我也对PT_MOUSE感兴趣,主要是为了避免使用SendInput()mouse_event()。)

每当我使用InjectTouchInput()致电PT_PEN时,它都会以ERROR_INVALID_PARAMETER失败。我已经尝试了很多字段组合来设置,但没有(到目前为止)工作。 MSDN文档没有描述为PT_PEN做些什么(它对PT_TOUCH没有多少描述,但至少有一个样本),所以&#39很难知道哪些字段应该被设置,哪些字段应该被忽略,任何特定的操作顺序等等。我一直在网上搜索,但是找不到PT_PEN使用的任何例子。

是否有人拥有示例代码或知道在何处找到有用文档的位置,或知道InjectTouchInput()应该如何用于PT_PEN(以及PT_MOUSE) ?

2 个答案:

答案 0 :(得分:1)

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

您可能会说这很明显,因为您将一组POINTER_TOUCH_INFO条目传递给API,但由于POINTER_TOUCH_INFO(以及所有后续文档)的文档正在描述,因此出现了混淆内容主要是从解释他给出的内容的人看到的,而不是他试图设置的内容, POINTER_INFOPOINTER_TOUCH_INFO中的第一个元素)可以指定指针类型为PT_POINTERPT_TOUCHPT_PENPT_MOUSEPT_TOUCHPAD,因此感觉有点自然而且#34; 等待,我可以注入所有这些不同类型的指针!"

当然,尽管共有POINTER_INFO,但所有指针类型的参数略有不同。例如,orientationpressurePT_TOUCHPOINTER_TOUCH_INFOtiltXtiltYrotation,和pressure PT_PENPOINTER_PEN_INFO);但鉴于指针类型始终是结构中的第一个字段,很容易确定哪些信息是相关的。

InjectTouchInput()可以POINTER_PEN_INFO个而不是POINTER_TOUCH_INFO条目吗?不,它不能 - 我试过,以防万一它会起作用。

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

从2014年开始this thread的中途是提及" 没有用于笔注入的API "并且事情没有&#从那时起,改进了39,因此仍然需要笔注射的驱动器。话虽如此,Windows UI Automation API显然可以注入所有指针类型(以及一个游戏手柄来启动),但只有Windows 10周年纪念版支持(我还没试过)。 / p>

答案 1 :(得分:0)

我们可以使用InputInjector.InjectPenInput

进行笔输入注入

在win32中没有用于笔注入的公共api。如果您的系统是Windows 10版本1809,则可以使用InjectSyntheticPointerInput