我想看看我是否能够通过在干净状态下在我的系统上运行“基准”、安装键盘记录器并重复基准测试来检测系统上是否存在键盘记录器。这个想法是键盘记录器需要消耗资源才能正确运行,并且应该导致较低的基准分数。
在代码中,我基本上编写了两个 while 循环,它们使用 win32API 调用 SendMessage() 和 PostMessage() 来模拟击键。它在给定的时间内执行循环并记录它发送了多少成功消息。
我期望键盘记录器要么没有可衡量的差异(毕竟,桌面上一直在执行很多“东西”,而且我认为键盘记录器可能不会使用很多......)或者它会导致数字略低。
这主要是我在“ SendMessage() ”调用的情况下看到的。
我不明白的是,我的基准测试显示对PostMessage()的调用次数急剧增加
在安装键盘记录器之前,平均执行多次,我看到每秒大约 10k PostMessage()。安装键盘记录器后,我现在看到每秒有近 25k 次 PostMessage() 调用。
这对我来说没有任何意义。
如果我对 PostMessage 的理解是正确的,它会在进程的消息队列中添加一条 windows 消息并恢复执行(而 SendMessage 会等到进程处理完消息后再返回)。我希望 PostMessage 的执行速度比 SendMessage 快,并且一旦消息队列已满,一些消息可能会丢失....但在我有限的理解中,没有任何东西可以帮助我理解键盘记录器如何提高性能 - 如此显着.
我觉得代码很简单。我可以确认它确实注册为击键(我将它们发送到记事本中)并且它们的键盘记录器正在记录它们。
有人可以向我解释我错过了什么吗?
键盘记录器如何提高性能?!
更新
我正在运行基准测试 10 次并对结果进行平均。
暂停键盘记录器(以便它仍然安装,但不记录)仍然产生了很高的结果。卸载键盘记录器并重新启动我的机器后,10 次运行的平均值现在是每秒 9.9k;非常符合我原来的结果。
我确实必须重新启动机器才能完成卸载。