C# 如何使Windows应用程序有条件地阻止输入?

C# 如何使Windows应用程序有条件地阻止输入?,c#,windows,pattern-recognition,C#,Windows,Pattern Recognition,您可能听说过,一个仅适用于Windows的实用程序,当它认为键盘上有猫或其他动物在键入类似“zlxkkk;”的无意义输入时,可以防止输入击键。这似乎是一个有趣的项目,在我的业余时间做,但我想知道一些细节,实施它 我想我可以做它的模式识别部分,要么用硬编码的启发式方法,要么用某种模式识别算法(我以前接触过,感觉很舒服)。我的问题是关于系统编程方面的事情,以及如何阻止输入的逻辑 如果检测到cat类型,您需要让应用程序观察输入并提出质询。你会保留一个最近击键的缓冲区,并且只有在非cat类型的情况下才让

您可能听说过,一个仅适用于Windows的实用程序,当它认为键盘上有猫或其他动物在键入类似“zlxkkk;”的无意义输入时,可以防止输入击键。这似乎是一个有趣的项目,在我的业余时间做,但我想知道一些细节,实施它

我想我可以做它的模式识别部分,要么用硬编码的启发式方法,要么用某种模式识别算法(我以前接触过,感觉很舒服)。我的问题是关于系统编程方面的事情,以及如何阻止输入的逻辑

如果检测到cat类型,您需要让应用程序观察输入并提出质询。你会保留一个最近击键的缓冲区,并且只有在非cat类型的情况下才让它们通过吗?或者,如果出现cat输入,在阻止输入之前,您是否只允许少量输入?您希望使用的实际逻辑是什么


至于阻止输入的实际机制,比如C#,在这个网站上还有其他问题。重申一下,我的问题是,您将使用什么逻辑来检测和阻止cat输入。

我会等到我认为键盘上有cat时,再阻止输入,因为缓冲区可能会有问题

例如,如果我正在键入并快速切换窗口,您将如何确定击键的位置


让它尽可能简单。

我会等到我认为键盘上有一只猫,然后阻止输入,因为缓冲区可能会有问题

例如,如果我正在键入并快速切换窗口,您将如何确定击键的位置


尽量保持简单。

在不知道这一点的情况下,我会从按下键的时间开始,而不是根据实际按下的键,认为动物不会简单地按下一个键,然后很快松开另一个键,等等,而是更可能在一组键上暂停


所以,如果你能简单地计算按键时间,我想这可能会起作用。

在不知道这一点的情况下,我会根据按键的时间来计算,而不是根据实际按下的键,认为动物不会简单地按下一个键然后很快地释放另一个键,等,但更可能在一组键上暂停


因此,如果您可以简单地计时按键,我认为这可能会奏效。

您需要考虑引入一个WIN32系统范围的钩子。这涵盖了这方面的基础知识(注意,它同时指定了应用程序或线程级别的钩子和系统范围的钩子)

一旦您理解了这一点,您将需要捕获几个与键盘相关的消息(当然,WM_KEYUP,还有一些其他WM_KEYxxxx消息,具体取决于您的需要)


然后,您需要引入决定击键是有效的还是胡言乱语的逻辑,要么传递消息(这样它们最终可以流到有焦点的应用程序),要么忽略它们

您需要考虑引入WIN32系统范围的钩子。这涵盖了这方面的基础知识(注意,它同时指定了应用程序或线程级别的钩子和系统范围的钩子)

一旦您理解了这一点,您将需要捕获几个与键盘相关的消息(当然,WM_KEYUP,还有一些其他WM_KEYxxxx消息,具体取决于您的需要)


然后,您需要引入决定击键是有效的还是胡言乱语的逻辑,要么传递消息(这样它们最终可以流到有焦点的应用程序),要么忽略它们

思考负载。我将从以下内容开始:

  • 等待无用户活动的时间:2分钟
  • 启动你的应用程序
  • 听键盘敲击声
  • 匹配键入的键(如果字典中存在)
  • 在六点或七点后阻止键盘

  • 思考负载。我将从以下内容开始:

  • 等待无用户活动的时间:2分钟
  • 启动你的应用程序
  • 听键盘敲击声
  • 匹配键入的键(如果字典中存在)
  • 在六点或七点后阻止键盘