如何通过WinAPI在C++中修改默认强调色?求代码示例
在C++中通过WinAPI修改系统默认强调色
方法1:修改注册表并发送系统通知
系统强调色的配置存储在当前用户注册表中,路径为HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize,对应键AccentColor为DWORD类型,值采用BGR格式(例如RGB(0,120,215)对应0xD77800)。
步骤:
- 打开目标注册表键
- 设置
AccentColor的目标值 - 关闭注册表键
- 发送系统消息通知设置更新
代码示例:
#include <windows.h> #include <iostream> int main() { // 目标强调色:蓝色(RGB(0,120,215)),转换为BGR格式DWORD值0xD77800 DWORD accentColor = 0xD77800; HKEY hKey; LSTATUS status = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", 0, KEY_SET_VALUE, &hKey); if (status != ERROR_SUCCESS) { std::cerr << "打开注册表键失败,错误码:" << status << std::endl; return 1; } status = RegSetValueEx(hKey, L"AccentColor", 0, REG_DWORD, (BYTE*)&accentColor, sizeof(DWORD)); if (status != ERROR_SUCCESS) { std::cerr << "设置AccentColor失败,错误码:" << status << std::endl; RegCloseKey(hKey); return 1; } RegCloseKey(hKey); // 广播通知系统设置变更 SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"Personalization", SMTO_ABORTIFHUNG, 5000, nullptr); std::cout << "强调色更新成功" << std::endl; return 0; }
注意:
- 该方法适用于Windows 10及以上版本,无需管理员权限
- 颜色值需转换为BGR格式,因为DWORD采用小端存储
方法2:使用Windows Runtime API(Windows 10 1607+)
若程序支持WinRT环境,可直接调用UISettings类修改强调色,无需手动处理注册表和通知。
代码示例(需项目启用WinRT支持):
#include <winrt/Windows.UI.ViewManagement.h> #include <iostream> using namespace winrt; using namespace Windows::UI::ViewManagement; int main() { init_apartment(); UISettings uiSettings; // 设置强调色为红色(RGBA格式,参数依次为Alpha、Red、Green、Blue) uiSettings.put_ColorValue(UIColorType::Accent, Windows::UI::Color{ 255, 255, 0, 0 }); std::cout << "通过WinRT API更新强调色成功" << std::endl; return 0; }
注意:
- 需在Visual Studio中配置项目启用WinRT支持(项目属性→常规→Windows SDK版本选择10.0及以上)
- 更改后系统会自动刷新UI,无需额外通知
内容的提问来源于stack exchange,提问作者RBMKBlaze
相关产品推荐
相关产品推荐

