【问题标题】:Allow off-screen touches with TouchInjection windows 8+ api?允许使用 TouchInjection windows 8+ api 进行屏幕外触摸?
【发布时间】:2019-02-19 19:29:20
【问题描述】:

我有一种情况,我需要将一些第 3 方闭源 Unity 应用程序嵌入到我们自己的应用程序中。我正在注入一个 DLL,它从它们的交换链创建一个 DX11 共享纹理。这部分有效并且完成了。

此外,我想隐藏包裹 Unity 应用程序的表单(幸运的是,您可以使用命令行设置它们的父句柄),这样我就可以 100% 控制在我们自己的应用程序中它的纹理会发生什么(+ 所以它不会干扰我们自己的应用程序的整体外观)。这也很好用,即使 Unity 表单完全不在屏幕上,我也可以毫无问题地获得纹理。

现在我的问题是,这个 Unity 应用程序需要与多点触控一起使用,经过相当多的谷歌搜索/堆栈溢出阅读后,我有点得出结论,没有办法(或者我没有找到任何办法)来编写有效的 @987654323 @ 消息仅适用于 Windows 中的一个窗口。 (这有点支持您需要调用单独的 WinApi 函数以根据在 lParamWM_POINTER* 消息中收到的指针/触摸的 ID 获取所有数据)

所以我使用的是 TouchInjection Windows API(InitializeTouchInjectionInjectTouchInput)(有关这些 API 的信息在互联网上具有误导性,但我实际上解决了他们所有的怪癖),如果 Unity 表单它工作正常在屏幕上可见。或者换句话说,如果触摸位置在屏幕边界内。

现在终于出现了问题:当我为注入的触摸指定屏幕外坐标时,我收到ERROR_INVALID_PARAMETER (87 / 0x57) 系统错误消息。否则它工作。有没有办法在 Windows 中关闭此检查?或者任何人在其他方式之前解决了这个问题?

(我们的应用程序不是最终用户应用程序,我们可以完全控制它在其中运行的环境,系统范围的修改也可以。)

提前致谢!

【问题讨论】:

    标签: windows winapi touch


    【解决方案1】:

    您不能关闭错误代码检查,因为它是函数内部的返回值,表示函数调用失败,然后函数返回或只更改错误代码。如果可以禁用错误代码,那么函数调用的状态是什么?成功还是失败? 您需要手动检查坐标并检测该做什么。

    【讨论】:

    • 我不想关闭错误代码检查,我想启用具有屏幕边界之外坐标的注入触摸。目前我们正在使用幽灵监视器解决方案,但这不是最好的,最好使用 100% 的软件解决方案。