一个程序能区分用户输入和程序输入吗?

6
有没有可能一个程序可以阻止其他程序的按键输入,但不能阻止用户直接在键盘上按键输入?例如:ProgramA包含一个文本字段;ProgramB是Windows屏幕键盘。在选择ProgramA中的文本字段后,我尝试在屏幕键盘程序中按下字母'c',但它不会出现在文本字段中。然而,当我直接从键盘按下字母'c'时,它会出现在ProgramA的文本字段中。我知道按键事件如何工作,它们如何排队,并且我已经看到了C++中的BlockInput函数。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646290%28v=vs.85%29.aspx

但是这个函数只是简单地阻止所有输入。
我遇到过一些以这种方式过滤输入的程序,但似乎无法弄清楚原因。我是不是漏掉了什么非常明显的东西?
这个问题主要涉及 Windows 7 操作系统上的 C++。

1
你在询问哪种编程语言和操作系统?对于这样的问题,同时标记Java和C++可能有些过于宽泛了。 - Hovercraft Full Of Eels
如果您熟悉Java中的Robot类,那么您的帮助将非常受欢迎。KeyPress命令在ProgramA中也被阻止了。 - user2212942
你可能正在寻找创建一个自助式程序。你有在谷歌上搜索这个术语吗? - Hovercraft Full Of Eels
你可以在你的应用程序中提供一个可视化键盘,这样你就知道输入是来自你的可视化键盘还是其他地方(可能是真实的键盘,因为你提供了一个可视化键盘,这意味着用户很可能不会使用虚拟键盘应用程序)...想一想。 - Khaled.K
1个回答

1
你永远无法确定输入是否来自硬件。最简单的例子是自定义驱动程序,它将模拟由软件输入驱动的真实键盘。
一些花哨的想法可以是将麦克风连接到设备上,以便听取声音/振动进行输入过滤,但你是指完全的硬件解决方案还是提供给个人用户的应用程序?

我正在尝试理解我的电脑上的Windows聊天应用程序(c++)如何阻止我编写的(java)程序的按键,但允许我在使用自己的手打字时输入。我只是在玩弄Java机器人类,并想知道为什么它不接受机器人输入,而只接受来自我的键盘的直接输入。http://docs.oracle.com/javase/6/docs/api/java/awt/Robot.html - user2212942

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接