【问题标题】:Distinguish SendKeys from Real user/keyboard keystrokes将 SendKeys 与真实用户/键盘击键区分开来
【发布时间】:2014-12-23 21:06:58
【问题描述】:

我正在尝试在 vb.net 中为 windows 开发一个打字速度计算器应用程序...

我要解决的问题是拒绝发送键,即我希望用户只从键盘输入文本。

有什么方法可以检测到来自其他应用程序或自动打字机的发送键并清除文本框?

我尝试过的事情:

试图在发生的事件上设置计时器以检测来自 sendkeys 的笔划(没有工作)

尝试了http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx中提到的低级钩子 在vb中通过禁用视觉样式运行主模块并从主运行我的表单以设置挂钩。(不起作用)

甚至尝试了 codeprojects 中的其他钩子。

我现在工作的想法是用户必须从表单中失去焦点才能激活将发送击键的应用程序。我想将焦点从文本框更改为按钮或其他东西,这样当另一个应用程序尝试发送密钥时,它就无法这样做了。

【问题讨论】:

  • 我确实尝试了链接中的代码......但它不起作用,我还尝试了一些其他代码示例都失败了,因此我发布了上述问题。
  • 您的问题并不表明您在此处发布之前已努力解决或研究该问题。如果你这样做了,edit 你的问题表明你已经尝试过并解释它如何不能满足你的需求。
  • Sendkeys 旨在将消息添加到队列中,就像键盘一样。因此,您无法确定哪个是哪个。顺便说一句,您的焦点想法也行不通,因为我可以使用热键或使用系统托盘激活我的应用程序,这不会导致您的应用程序失去焦点。最接近的方法是查看每个正在运行的应用程序中加载了哪些程序集,并查看其中一个程序集是否与用于 SendKeys 的程序集相同,但这会返回很多误报。

标签: vb.net keypress keydown sendkeys keyup


【解决方案1】:

您可以使用一些进程间通信,例如named pipes,而不是检测来自其他应用程序的击键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2021-10-24
    • 2011-11-14
    • 1970-01-01
    • 2017-06-01
    • 2011-09-12
    • 2023-03-21
    相关资源
    最近更新 更多