1;如何取出注册表值,比如墙纸的值:路径如下   Reg.RootKey := HKEY_CURRENT_USER;
   Reg.OpenKey('\Control Panel\Desktop',TRUE) then
   Reg.WriteString('Wallpaper','E:\111.jpg');我如何才能取出E:\111.jpg2;如何才能用BUTTON刷新桌面?
我用了
SendMessage(Handle,VK_F5,0,0);
showwindow(Getdesktopwindow,sw_hide)
showwindow(getdesktopwindow,sw_show);
但都不行,如何才能达到刷新桌面的目的?

解决方案 »

  1.   

    桌面重画,
    var 
       wnd:HWND; 
    begin 
       Wnd := GetDesktopWindow; 
       Wnd := FindWindowEx(Wnd, 0, 'Progman', nil); 
       Wnd := FindWindowEx(Wnd, 0, 'SHELLDLL_DefView', nil); 
       Wnd := FindWindowEx(Wnd, 0, 'SysListView32', nil); 
       InvalidateRect(Wnd, nil, TRUE); 
    end; 
      

  2.   

    更改墙纸:
       Reg.RootKey := HKEY_CURRENT_USER;
       Reg.OpenKey('\Control Panel\Desktop',TRUE) then
       Reg.WriteString('Wallpaper','E:\111.jpg');
    加上:
    Systemparametersinfo (SPI_SetDeskWallPaper,0,'E:\111.jpg',SPIF_UPDATEINIFILE);
    桌面重画:
    还可以实现刷新图标!
    procedure RebuildIconCache;
    var
      IconW: Integer;
    begin
      IconW := GetSystemMetrics(SM_CXICON);
      with TRegIniFile.Create('Control Panel\Desktop') do
        try
          WriteString('WindowMetrics', 'Shell Icon Size', IntToStr(IconW - 1));
          SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, 0);
          WriteString('WindowMetrics', 'Shell Icon Size', IntToStr(IconW));
          SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, 0);
        finally
          Free;
        end;
    end;
      

  3.   

    屏幕的Refresh(只需一行!)
    --------------------------------------------------
    RedrawWindow(0,nil,0,RDW_ERASE or RDW_INVALIDATE or RDW_ALLCHILDREN);
     handle RGN(可刷新局部屏幕) 
      

  4.   

    谢谢楼上各位,按你们说的试了一下,可以刷新屏幕,但是墙纸并没有随之改变,而我只要在桌面空白处点一下,在F5墙纸就变了。我现在想将焦点移至桌面,如何做?
    另外,我的的第一个问题如何解决,就是如何将注册表中的值E:\111.jpg取出?
      

  5.   

    1、文件名称 := Reg.ReadString('Wallpaper');2、见楼上
      

  6.   

    问题1 已经解决,谢谢smilelhh(blue) 稍后给分。哪位高手知道 问题2 如何才能解决?
      

  7.   

    //uses shlobj;
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NiL, NiL);