首页 > 编程语言 > 详细

C++实现修改windows窗体背景颜色小工具

时间:2020-09-28 10:16:35      阅读:29      评论:0      收藏:0      [点我收藏+]
C++实现修改windows窗体背景颜色小工具

C++实现修改windows窗体背景颜色小工具。

主要思路是:

  1. 修改widows注册表,将window窗体背景色修改为淡绿色("199 237 204")。
  2. 刷新windows窗体,让刷新窗体背景色当即生效。

示例如下:

  1. 程序入口点代码

    ```c++
    // 01_backgroundcolorregchangeTest.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include <iostream>
    #include <Windows.h>
    #include <tchar.h>
    using namespace std;

    TCHAR g_tszRegCareValue[2][16] = {_T("255 255 255"), _T("199 237 204")}; //注册表默认值 保护色值
    DWORD g_szdwColors[2] = {RGB(255, 255, 255), RGB(199, 237, 204)}; //颜色 白色和 豆沙绿
    int g_iElements[1] = {COLOR_WINDOW}; //修改颜色的类型 这里是窗口

    void CreateReg(HKEY Root,LPCTSTR szSubKey,LPCTSTR valueName,LPCTSTR RegValueBuffer) //修改注册表键值
    {
    HKEY key;
    //long Ret=RegCreateKeyEx(Root, (LPCTSTR)szSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&key,NULL);
    //cout<<Ret<<endl;
    //打开注册表某一路径
    long Ret = RegOpenKeyEx(Root, szSubKey, 0, KEY_ALL_ACCESS, &key);
    cout<<Ret<<endl;
    //使用Cstring和char[]会乱码,这里写入键值必须使用LPCTSTR类型
    //修改打开注册表路径下某个键值
    Ret=RegSetValueEx(key, valueName, 0, REG_SZ, (CONST BYTE)RegValueBuffer, (lstrlen(RegValueBuffer) + 1)sizeof(TCHAR));
    cout<<Ret<<endl;
    if(Ret!=ERROR_SUCCESS)
    {
    cout<<"error!"<<endl;
    }
    RegCloseKey(key);
    }

    //刷新窗口 当即生效
    void UpdateWindowColor(const DWORD *pdwInColor)
    {
    SetSysColors(1, &g_iElements[0], pdwInColor);
    }

    //设置windows窗口背景色
    void SetWindowBackgroundColor()
    {
    //设置windows窗口背景色对应注册表的路径
    LPCTSTR baseKey = _T("Control Panel\Colors");
    LPCTSTR subKey = _T("Window");
    //判断是否修改背景颜色
    DWORD dwCurrentColors[1];
    dwCurrentColors[0] = GetSysColor(g_iElements[0]);
    if (0x00ffffff == dwCurrentColors[0])
    {
    CreateReg(HKEY_CURRENT_USER, baseKey, subKey, g_tszRegCareValue[1]);
    //刷新窗口立即生效
    UpdateWindowColor(&g_szdwColors[1]);
    } else {
    CreateReg(HKEY_CURRENT_USER, baseKey, subKey, g_tszRegCareValue[0]);
    //刷新窗口立即生效
    UpdateWindowColor(&g_szdwColors[0]);
    }
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
    SetWindowBackgroundColor();
    return 0;
    }

  2. 注意立即刷新windows窗体,经过查找使用SetSysColors函数

    ```c++
    //刷新窗口 当即生效
    void UpdateWindowColor(const DWORD *pdwInColor)
    {
    SetSysColors(1, &g_iElements[0], pdwInColor);
    }

  3. 修改windows注册表函数

    ```c++
    //修改windows注册表函数
    void CreateReg(HKEY Root,LPCTSTR szSubKey,LPCTSTR valueName,LPCTSTR RegValueBuffer) //修改注册表键值
    {
    HKEY key;
    //long Ret=RegCreateKeyEx(Root, (LPCTSTR)szSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&key,NULL);
    //cout<<Ret<<endl;
    //打开注册表某一路径
    long Ret = RegOpenKeyEx(Root, szSubKey, 0, KEY_ALL_ACCESS, &key);
    cout<<Ret<<endl;
    //使用Cstring和char[]会乱码,这里写入键值必须使用LPCTSTR类型
    //修改打开注册表路径下某个键值
    Ret=RegSetValueEx(key, valueName, 0, REG_SZ, (CONST BYTE)RegValueBuffer, (lstrlen(RegValueBuffer) + 1)sizeof(TCHAR));
    cout<<Ret<<endl;
    if(Ret!=ERROR_SUCCESS)
    {
    cout<<"error!"<<endl;
    }
    RegCloseKey(key);
    }

  4. 参考意见和网页地址:

    1. 修改window窗体背景色最佳配色("199 237 204")。
    2. 重启explorer进程,可以但是还需要重启,我们的目的是不重启也生效。
    3. 采用SendMessageTimeout函数发送广播消息,这个方法行不通。
    4. 采用SHChangeNotify函数,这个方法行不通。
    5. https://www.cnblogs.com/happyhaoyun/p/4566783.html
    6. <http://blog.csdn.net/openhero/article/details/8159471>;
    7. <http://www.cplusplus.com/forum/windows/116006/>;

C++实现修改windows窗体背景颜色小工具

原文:https://blog.51cto.com/zhaoanan/2537381

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!