0

我制作了一个程序来改变鼠标灵敏度,就像你可以用控制面板做的一样。更改是在注册表中进行的HKEY_CURRENT_USER\Control Panel\Mouse,它们实际上已经完成(我已经从 regedit.exe 检查了它们),但是鼠标的工作就像没有进行这些更改一样。换句话说,更改不会生效,只有在您使用控制面板时才会生效。为什么它们不生效?

4

2 回答 2

1

Windows 注册表不是一直刷新的东西。您所做的更改将在当前用户(这就是为什么它是 HKEY_CURRENT_USER)再次登录后应用,或者正如您在使用控制面板后所说的那样,它将读取注册表。我不知道你的程序是用什么语言编写的,但你应该看看这个链接:“ https://msdn.microsoft.com/en-us/library/ms724947.aspx

于 2015-07-09T15:06:37.480 回答
1

通常,不支持直接调整注册表设置,尤其是当有 API 可以调整设置时。在这种情况下,API 是SystemParametersInfo。特别是,您需要使用SPI_SETMOUSESPEED作为参数的uiAction参数。

换句话说,更改不会生效,只有在您使用控制面板时才会生效。为什么它们不生效?

因为它通常比在注册表中设置值多一点。通常在更改值后必须发送通知,以便告诉机器上的所有其他软件删除任何缓存的值并用现在注册表中的新值替换它们。在许多情况下,通知将采用广播消息的形式。

在鼠标驱动程序设置的情况下,您可能需要使用SPIF_UPDATEINIFILE参数的fWinIni参数。您可能还需要 OR 它SPIF_SENDCHANGE来广播WM_SETTINGCHANGE消息,但我不确定。

于 2015-07-09T16:52:32.600 回答