桌面->右键->属性->外观->高级->项目选择(窗口)、颜色1(L)选择(其它)将色调改为:85。饱和度:123。亮度:205->添加到自定义颜色->在自定义颜色选定点确定->确定这样所有的文档都不再是刺眼的白底黑字,而是非常柔和的豆沙绿色,这个色调是眼科专家配置的,长时间使用会很有效的缓解眼睛疲劳保护眼睛   
用代码实现,给个思路
给代码,再加分

解决方案 »

  1.   

    键:HKEY_CURRENT_USER\Control Panel\Colors
    名:Window
    值:199 237 204
      

  2.   

    如果是有启用theme,则需要先找出当前活动的theme文件,然后修改相应的项
      

  3.   

    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NiL, NiL);
    试了一下,不行,只相当于f5的效果
      

  4.   

    //SYSTEMPARAMETERSINFO(SPI_SETDESKWALLPAPER,0,NIL,SPIF_SENDCHANGE);
     //SendMessage(FindWindow('Progman', 'Program Manager'), WM_COMMAND, 106597, 0);
      //sendMessage(FindWindow('Progman','Program   Manager'),WM_COMMAND,$A065,0);
    //SYSTEMPARAMETERSINFO(SPI_SETDESKWALLPAPER,0,NIL,SPIF_UPDATEINIFILE   Or   SPIF_SENDCHANGE);
      SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST+SHCNF_FLUSH,nil,nil);
     //SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
    // SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NiL, NiL);这些都不行
      

  5.   


    const
      FNoFolderOptions = 'NoFolderOptions';
      FCIDM_MENU_VIEW_REFRESH = FCIDM_SHVIEWSHELL + $0103;
    function EnumWindowsProc(AHWnd: HWND;LPARAM: lParam): boolean; stdcall;procedure TfrmMain.RefershDesk;
    begin
      PostMessage(HWND_BROADCAST, WM_COMMAND, FCIDM_MENU_VIEW_REFRESH, 0);
      SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
      UpdateExplorer;
    end;function EnumWindowsProc(AHWnd: HWND;LPARAM: lParam): boolean; stdcall;
      var
      WClassName : array[0..254] of char;
    begin
      Result := True;
      GetClassName(AHWnd, @WClassName, 254);
      if SameText(WClassName,'CabinetWClass') then
      begin
        PostMessage(AHWnd,$111, 28931, 0);
      end;
    end;Procedure UpdateExplorer;
      var
      AHandle : THandle;
    begin
      EnumWindows(@EnumWindowsProc, 0);
      AHandle := FindWindow('Progman',Nil);   
      if AHandle <> 0 then PostMessage(AHandle,$111, 28931, 0);
    end;
      

  6.   

    补充:FCIDM_SHVIEWSHELL = $7000;
      

  7.   

    请问稻草人,这个要怎么用,怎么两个函数相同?unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     const
     FCIDM_SHVIEWSHELL = $7000;
      FNoFolderOptions = 'NoFolderOptions';
      FCIDM_MENU_VIEW_REFRESH = FCIDM_SHVIEWSHELL + $0103;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    {function EnumWindowsProc(AHWnd: HWND;LPARAM: lParam): boolean; stdcall;procedure RefershDesk;
    begin
      PostMessage(HWND_BROADCAST, WM_COMMAND, FCIDM_MENU_VIEW_REFRESH, 0);
      SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
      UpdateExplorer;
    end; }function EnumWindowsProc(AHWnd: HWND;LPARAM: lParam): boolean; stdcall;
      var
      WClassName : array[0..254] of char;
    begin
      Result := True;
      GetClassName(AHWnd, @WClassName, 254);
      if SameText(WClassName,'CabinetWClass') then
      begin
        PostMessage(AHWnd,$111, 28931, 0);
      end;
    end;Procedure UpdateExplorer;
      var
      AHandle : THandle;
    begin
      EnumWindows(@EnumWindowsProc, 0);
      AHandle := FindWindow('Progman',Nil);   
      if AHandle <> 0 then PostMessage(AHandle,$111, 28931, 0);
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    UpdateExplorer;
    end;end.
    我哪里用错了吗?
      

  8.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,registry;
     const
     FCIDM_SHVIEWSHELL = $7000;
      FNoFolderOptions = 'NoFolderOptions';
      FCIDM_MENU_VIEW_REFRESH = FCIDM_SHVIEWSHELL + $0103;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    function EnumWindowsProc(AHWnd: HWND;LPARAM: lParam): boolean; stdcall;
      var
      WClassName : array[0..254] of char;
    begin
      Result := True;
      GetClassName(AHWnd, @WClassName, 254);
      if SameText(WClassName,'CabinetWClass') then
      begin
        PostMessage(AHWnd,$111, 28931, 0);
      end;
    end;
    //function EnumWindowsProc(AHWnd: HWND;LPARAM: lParam): boolean; stdcall;
    Procedure UpdateExplorer;
      var
      AHandle : THandle;
    begin
      EnumWindows(@EnumWindowsProc, 0);
      AHandle := FindWindow('Progman',Nil);
      if AHandle <> 0 then PostMessage(AHandle,$111, 28931, 0);
    end;
    procedure RefershDesk;
    begin
      PostMessage(HWND_BROADCAST, WM_COMMAND, FCIDM_MENU_VIEW_REFRESH, 0);
      SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
      UpdateExplorer;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
     reg:tregistry;
    begin
    reg:=tregistry.Create;
    reg.RootKey:=HKEY_CURRENT_USER;
    reg.OpenKey('\Control Panel\Colors',true);
    reg.WriteString('window','199 237 204');
    reg.CloseKey;
    reg.Free;
    RefershDesk;
    end;end.还是没有反映,运行后,屏幕确实有刷新的动作,但各个窗口的背景色依然是白色???
      

  9.   

    假设这个注册表无法立即更新的话能否用WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,2’, SW_SHOWNORMAL);
    打开窗口,然后模拟手动操作呢?
    虽然不及注册表方便,但只要能实现就可以,分一样给
      

  10.   

    reg.OpenKey('\Control Panel\Colors',true);
    reg.WriteString('ActiveTitle','2 3 4');
    试了n次了,不能刷新
    在你的机器上可以刷新吗?
    如你所说,改了,注册表写入成功,但没有效果
      

  11.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      ColorNo:integer;
      Colors:COLORREF;
    begin
    //下列常量表示设置的是哪些显示元素,这些常量已定义在Windows单元中,不必再定义,直接使用即可
    //  COLOR_SCROLLBAR          =0    //滚动条颜色
    //  COLOR_BACKGROUND         =1    //无墙纸时的背景色
    //  COLOR_ACTIVECAPTION      =2    //活动窗口标题颜色
    //  COLOR_INACTIVECAPTION    =3    //非活动窗口标题颜色
    //  COLOR_MENU               =4    //菜单
    //  COLOR_WINDOW             =5    //Windows背景
    //  COLOR_WINDOWFRAME        =6    //Window  frame
    //  COLOR_MENUTEXT           =7    //Window文字
    //  COLOR_WINDOWTEXT         =8    //3D阴影(Win95)
    //  COLOR_CAPTIONTEXT        =9    //窗口标题中的文字
    //  COLOR_ACTIVEBORDER       =10   //活动窗口边框
    //  COLOR_INACTIVEBORDER     =11   //非活动窗口边框
    //  COLOR_APPWORKSPACE       =12   //MDI桌面的背景
    //  COLOR_HIGHLIGHT          =13   //选择项背景
    //  COLOR_HIGHLIGHTTEXT      =14   //选择菜单项
    //  COLOR_BTNFACE            =15   //按钮
    //  COLOR_BTNSHADOW          =16   //3D按钮阴影
    //  COLOR_GRAYTEXT           =17   //Grey text,of zero if dithering is used.
    //  COLOR_BTNTEXT            =18   //按钮文本
    //  COLOR_INACTIVECAPTIONTEXT=19   //非活动窗口文本
    //  COLOR_BTNHIGHLIGHT       =20   //3D高亮按钮
    //  COLOR_2NDACTIVECAPTION   =27   //只用于Win98:第2活动窗口颜色
    //  COLOR_2NDINACTIVECAPTION =28   //只用于Win98:第2非活动窗口颜色
      COLORNO:=COLOR_WINDOW; //设置Windows背景
      Colors:=RGB(199,237,204);
      SetSysColors(1, ColorNo,Colors); //这个函数无论是否使用桌面主题,都能生效
    end;
    这个函数是测试过的,没有问题。
      

  12.   

    根本不需要写注册表啦什么的,就一个系统调用就完成了。而且其速度比在Windows桌面属性设置快多了,点击按钮立即生效。
    主要是没有显示改变桌面主题时的那个“请稍候”的窗口。
      

  13.   

    wooden954
    没想到,你效率这么高!别的不说了,200分奉上!!还是说一声,谢谢!!