WM_SETTINGSCHANGE 在将首选项更改为暗模式时收到两次

问题描述 投票:0回答:1

我正在 WndProc 中捕获 WM_SETTINGSCHANGE,以便我可以更新我的应用程序以进行暗/亮模式更改。当我在 Windows 11 上的个性化/颜色/选择您的模式(浅色、深色、自定义)中更改我的用户首选项时,我运行该应用程序并捕获消息。

我注意到更改我的首选项会在 WndProc 中生成两条 WM_SETTINGSCHANGE 消息。 他们在 LParam 中确实有不同的数字,但我无法弄清楚如何在 C# 中打印 LParam 字符串(如果这有所不同)。

两条消息的取值如下,其中0=user policy change。我不知道 lparams 的值是什么——文档说它们是消息发件人提供的字符串地址(可能是空字符串?):

wparam=0, lparam=800528915624
wparam=0, lparam=800528912280

这是否意味着每当我收到一条消息时,我必须更新我所有的应用程序设置两次? (WM_SETTINGSCHANGE 的 Microsoft 文档建议每次更新所有应用程序系统设置。)有谁知道为什么我的单一偏好更改会触发两个设置更改消息?谢谢。

winapi wndproc
1个回答
0
投票

根据

WM_SETTINGCHANGE
文档:

lParam 是一个指向字符串的指针,该字符串指示包含已更改的系统参数的区域。该参数通常不指示更改了哪个特定系统参数。 (请注意,某些应用程序发送此消息时 lParam 设置为 NULL。)通常,当您收到此消息时,您应该检查并重新加载应用程序使用的任何系统参数设置。

在 C# 中,使用

PtrToStringAuto()
PtrToStringUni()
lParam
.

访问字符串

但是,正如 @IInspectable 所指出的,您可能会收到具有相同字符串值的多条消息。所以是的,您每次都必须重新加载您的应用程序设置。为避免这种情况,您可以启动一个短计时器,其中每条新消息都会重置计时器,然后仅在计时器结束时才重新加载您的应用程序设置。

© www.soinside.com 2019 - 2024. All rights reserved.