c# - 原始输入 API 在 Windows 7/Vista 操作系统中的使用范围。它可以应用于整个环境还是只应用于焦点窗口?

标签 c# .net vb.net api sdk

将我的一些工作外包并自己完成一部分的业余开发人员。我一直在开发字典/同义词库/拼写检查和建议应用程序,我正试图在 Windows 环境中的所有应用程序上工作。

我使用 Hook 来获取击键并在用户输入定义和拼写建议时显示输出。这并没有完成我想要的一切。用于拼写检查和建议很好,但点击一个已经存在的词或触摸屏界面触摸一个它不起作用的词。

我正在阅读 MSDN 上的 Raw Input API,并认为它可以工作,但我雇用的开发人员告诉我,RAW 输入的范围仅在具有焦点的窗口上,因此不能进行低级 Hook 。我正在考虑付出努力,但在做出努力之前需要第二个第三个第四个视角。

MSDN 引用:http://msdn.microsoft.com/en-us/library/ff468896%28v=VS.85%29.aspx

希望所有背景信息都不会影响问题。感谢您的见解。

问候,

约翰

最佳答案

是的,他是对的。 RawInput 消息 (WM_INPUT) 仅为聚焦窗口生成。也许您可以通过某种方式解决这个问题,但这不是主要问题。

顾名思义,RawInput 确实为您提供了原始鼠标数据。此数据只是相对鼠标移动或鼠标增量数据。当鼠标到达屏幕边缘时,这些值仍会输入到消息中,对于您的情况最重要的是:它不会为您提供指针弹道(有关指针弹道的一些解释,请参阅本文:http://msdn.microsoft.com/en-us/windows/hardware/gg463319)。这使得确定实际光标位置变得几乎不可能。

您现在可以尝试模拟所有这些行为,并模拟光标位置,但指针弹道在不同版本的 Windows 上并不相同。 XP 的行为与 Vista 不同,我认为他们在 Windows 7 中再次更改了公式。

API 表明,有些设备可以为您提供位置数据而不是相对数据,但我从未遇到过表现出这种行为的设备,甚至触摸屏也没有(尽管这可能取决于驱动程序),并且它对于标准鼠标肯定不起作用。

关于c# - 原始输入 API 在 Windows 7/Vista 操作系统中的使用范围。它可以应用于整个环境还是只应用于焦点窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7193497/

相关文章:

c# - 防止 ViewModel 依赖的方法

C# 反射 SetValue() 找不到设置访问器

vb.net - 在 CSV 文件中包含前导零而不导入

c# - 如何在 wpf 中设置按钮样式的数据属性?

c# - 国际化 HelloWorld 程序 .NET

c# - Object.GetType() 的性能

c# - 一旦图像在系统托盘中结束,通知图标图像看起来很糟糕

C# MessageBox 导致按键处理程序忽略 SuppressKeyPress

xml - 使用 VB.net 读取 XML

带有函数(x)的 VB.NET Linq 表达式未执行?