在注册表中将 AutoRepeatRate 值修改为低于 10ms 没有任何效果

在注册表中将 AutoRepeatRate 值修改为低于 10ms 没有任何效果

我遇到了一个有点奇怪的问题,想请教一些建议。

我想降低键盘重复率重复延迟通过编辑注册表值可以实现超出控制面板中通常允许的操作。但是,编辑“自动重复速度“在超过某个点之后不会产生任何效果。我附上了“键盘响应”注册表值的屏幕截图作为参考。 注册表设置

我在 YouTube 上观看了许多教程视频,并阅读了本网站上的一些关于如何执行此操作的文章,每个人都说了同样的话:

  1. 设置除标志自动重复延迟自动重复速度为 0。
  2. 标志至 59
  3. 自动重复延迟自动重复速度为首选值。

话虽如此,降低“自动重复速度“任何低于 10ms 的值仍然会给出与 10ms 相同的重复率。我没有问题自动重复延迟设置,因为它会响应我输入的值并改变自动重复速度将值设置为 10ms 以上的任何值都会产生影响,所以在我看来我做的是正确的事情,但它就是不起作用。

我认为还有一些与我遇到的问题相关的信息:

大约两周前,我成功地让所有这些东西正常工作,但是,我不喜欢手动编辑注册表的想法,因此我将所有内容重置为原来的状态,并选择了一个名为“keyrate”的实用程序(来源)让我编辑重复率重复延迟值。但是,我最近注意到“keyrate”实用程序并没有将重复率降低到应有的水平,因此我尝试返回手动注册表编辑,但它也停止工作了。

当我自己研究这个问题时,我发现我使用的“keyrate”实用程序并没有降低重复率设置为 10ms 以下的值,这正是我现在在注册表中遇到的问题。这让我相信,正是使用该实用程序导致我现在遇到此问题。

以下是该实用程序的源代码:

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

BOOL parseDword(const char* in, DWORD* out)
{
   char* end;
   long result = strtol(in, &end, 10);
   BOOL success = (errno == 0 && end != in);
   if (success)
   {
       *out = result;
   }
   return success;
}


int main(int argc, char* argv[])
{
   FILTERKEYS keys = { sizeof(FILTERKEYS) };

   if (argc == 1)
   {
      puts ("No parameters given: disabling.");
   }
   else if (argc != 3)
   {
      puts ("Usage: keyrate <delay ms> <repeat ms>\nCall with no parameters to disable.");
      return 0;
   }
   else if (parseDword(argv[1], &keys.iDelayMSec) 
         && parseDword(argv[2], &keys.iRepeatMSec))
   {
      printf("Setting keyrate: delay: %d, rate: %d\n", (int) keys.iDelayMSec, (int) keys.iRepeatMSec);
      keys.dwFlags = FKF_FILTERKEYSON|FKF_AVAILABLE;
   }

   if (!SystemParametersInfo (SPI_SETFILTERKEYS, 0, (LPVOID) &keys, 0))
   {
      fprintf (stderr, "System call failed.\nUnable to set keyrate.");
   }

   return 0;
}

不幸的是,我不知道如何阅读它,因此我不知道如何才能撤销它对我的电脑所做的更改。因此,我想向知道发生了什么事情的人寻求帮助。

在此先向所有试图帮助我的人表示衷心的感谢。

相关内容