0

您可能听说过PawSense,这是一个仅限 Windows 的实用程序,当它认为键盘上有猫或其他动物输入诸如“zlxkkkkkkkk;”之类的无意义输入时,它会阻止输入击键。这似乎是我业余时间做的一个有趣的项目,但我想知道实现它的一些细节。

我认为我可以使用硬编码启发式或使用某种模式识别算法(我之前接触过并且感觉很舒服)来完成其中的模式识别部分。我的问题是关于事物的系统编程方面以及如何阻止输入的逻辑。

如果您检测到猫打字,您需要让您的应用程序观察输入并提出挑战。您是否会保留最近的击键缓冲区,并且仅在非猫打字时才让它们通过?或者如果出现猫打字,你会在阻止输入之前只让一小部分通过吗?您想要使用的实际逻辑是什么?

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

4

4 回答 4

2

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

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

让它尽可能简单。

于 2009-10-25T02:33:40.873 回答
2

您需要考虑引入一个WIN32 系统范围的钩子。这篇MSDN 文章涵盖了这方面的基础知识(注意它指定了应用程序或线程级别的挂钩以及系统范围的挂钩)。

一旦你理解了这一点,你就需要捕捉几个与键盘相关的消息,当然是 WM_KEYUP,还有一些其他的 WM_KEYxxxx 消息,这取决于你的需要)。

You'll then need to introduce the logic which decides whether keystrokes are valid or gibberish, and either pass-on the messages (so they can eventually trickle down to the application which has focus) or ignore them.

于 2009-10-25T02:48:17.333 回答
1

在对此一无所知的情况下,我会根据按下键的时间而不是实际按下的键来开始,认为动物不会简单地按下一个键并很快释放它,然后再释放一个,等等。但更有可能在一组键上暂停。

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

于 2009-10-25T02:47:46.040 回答
0

Thinking out load. I would start with something like following:

  1. Wait for no user activity for like: 2 minutes time.
  2. Start your app
  3. Listen to keyboard hits
  4. Match the typed keys if it exists in the dictionary
  5. Block the keypad after six or seven.
于 2009-10-25T06:50:44.987 回答