我在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
) ?
答案 0 :(得分:1)
事实证明InjectTouchInput()
确实只适用于触控输入 - 而不是笔,鼠标或通用指针。
您可能会说这很明显,因为您将一组POINTER_TOUCH_INFO
条目传递给API,但由于POINTER_TOUCH_INFO
(以及所有后续文档)的文档正在描述,因此出现了混淆内容主要是从解释他给出的内容的人看到的,而不是他试图设置的内容,和 POINTER_INFO
(POINTER_TOUCH_INFO
中的第一个元素)可以指定指针类型为PT_POINTER
,PT_TOUCH
,PT_PEN
,PT_MOUSE
或PT_TOUCHPAD
,因此感觉有点自然而且#34; 等待,我可以注入所有这些不同类型的指针!"
当然,尽管共有POINTER_INFO
,但所有指针类型的参数略有不同。例如,orientation
(pressure
)PT_TOUCH
和POINTER_TOUCH_INFO
,tiltX
,tiltY
,rotation
,和pressure
PT_PEN
(POINTER_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。