zoukankan      html  css  js  c++  java
  • Icon cache rebuilding with Delphi(Delphi 清除Windows 图标缓存源代码)

    清除Windows图标缓存的代码:

    procedure RebuildIconCache;
    
    ....
    const
      sr_WindowMetrics='Control PanelDesktopWindowMetrics';
      sr_ShellIconSize='Shell Icon Size';
    
    function  WindowsDir:string;
    var
     buffer: array [0..255] of char;
    begin
     GetWindowsDirectory(@Buffer,SizeOf(buffer));
     Result:=Buffer;
    end;
    
    Function UpdateAllWindowsCallback(WHandle : HWnd;
      Var Parm : Pointer) :
      Boolean; stdcall;
    begin
     SendMessage(WHandle,WM_SETTINGCHANGE,0,0);
     Result:=True;
    end;
    
    Procedure UpdateAllWindows;
    Begin
      EnumWindows(@UpdateAllWindowsCallback,
      WM_SETTINGCHANGE);
    End;
    
    
    function GetIconCacheFile:string;
    begin
     Result:=getwindowspath+'ShellIconCache';
    end;
    
    procedure DeleteIconCache;
    var
     sfile:string;
    begin
     sfile:=GetIconCacheFile;
     if fileexists(sfile) then begin
      if deletefile(sfile)=false 
      then showmessage('Can not erase file: '+sfile);
     end;
     QueryRestartWindows;
    end;
    
    
    function RefreshActiveDesktop:boolean;
    const
      CLSID_ActiveDesktop: TGUID 
      = '{75048700-EF1F-11D0-9888-006097DEACF9}';
    var
      ActiveDesktop: IActiveDesktop;
    begin
     try
      ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
        as IActiveDesktop;
      ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
      Result:=true;
     except
      Result:=false;
     end;
    end;
    
    procedure RefreshDesktop;
    var
     wnd:THandle;
     fl:boolean;
    begin
     fl:=RefreshActiveDesktop;
     if fl=false then begin
      wnd:=FindWindow('Progman', 'Program Manager');
      if wnd<>0 then SendMessage(wnd,WM_COMMAND,$A065,0)
      else UpdateAllWindows;
     end;
    end;
    
    procedure RebuildIconCache;
    var
     news,olds:string;
     sz:integer;
    begin
     Startwait;
     try
      deletefile(GetIconCacheFile);
      olds:=regreadstring(HKEY_CURRENT_USER,
        sr_WindowMetrics+sr_ShellIconSize);
      sz:=strtointdef(olds,32);
      inc(sz);
      news:=inttostr(sz);
      regwritestring(HKEY_CURRENT_USER,
        sr_WindowMetrics+sr_ShellIconSize,news);
      UpdateAllWindows;
      if olds='' then olds:='32';
      regwritestring(HKEY_CURRENT_USER,
        sr_WindowMetrics+sr_ShellIconSize,olds);
      UpdateAllWindows;
      RefreshDeskTop;
     finally
      StopWait;
     end;
    end;
  • 相关阅读:
    一个基于C++11的定时器队列(timerfd,poll实现)
    Mysql学习(一)添加一个新的用户并用golang操作Mysql
    epoll使用详解
    基于C++11实现线程池的工作原理
    ubuntu18.04初始化配置
    muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
    muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制
    muduo网络库学习笔记(三)TimerQueue定时器队列
    关于 JavaScript 的 null 和 undefined,判断 null 的真实类型
    vue 双向数据绑定原理
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3639960.html
Copyright © 2011-2022 走看看