【问题标题】:Can a Program Differentiate between User Key Input and Program key Input?程序可以区分用户键输入和程序键输入吗?
【发布时间】:2013-03-16 17:35:15
【问题描述】:

程序是否可以阻止来自其他程序的键输入,但不能直接从用户的手按键盘上的键进行键输入?

例如:

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++有关。

【问题讨论】:

  • 您询问的是哪种编程语言和操作系统?为 java 和 c++ 标签标记这样的问题似乎有点过于宽泛。
  • 气垫船,如果您熟悉 Java 中的机器人类,我们将不胜感激。在 ProgramA 中也阻止 KeyPress 命令。
  • 您可能正在寻找创建自助服务终端程序。你用谷歌搜索过这个词吗?
  • 你可以在你的应用程序中提供一个可视键盘,这样你就知道输入是来自你的可视键盘还是来自其他地方(可能是真实的键盘,因为你提供了一个可视键盘意味着它不太可能用户会使用虚拟键盘应用程序).​​. 考虑一下

标签: java c++ events key filtering


【解决方案1】:

您永远无法确定输入是否来自硬件。最简单的示例是自定义驱动程序,它将模拟由软件输入驱动的真实键盘。

一些奇特的想法可以将麦克风连接到设备,以侦听声音/振动以进行输入过滤,但您的意思是完整的硬件解决方案或应用程序,将提供给个人用户吗?

【讨论】:

  • 我试图了解我计算机上的 Windows 聊天应用程序 (c++) 如何以某种方式阻止我编写的 (java) 程序中的 keyPresses,但允许我在键盘上键入时键入它用我自己的双手。我只是在摆弄 java 机器人类,想知道为什么它不接受机器人输入,而只接受来自我的键盘的直接输入。 docs.oracle.com/javase/6/docs/api/java/awt/Robot.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多