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;
  • 相关阅读:
    一个用css写出来的下拉菜单
    oracle创建新的用户 创建序列 并生成自动自增
    Ubuntu 16.04下安装网络流量分析工具 Wireshark
    Ubuntu16.04安装PostgreSQL并使用pgadmin3管理数据库_图文详解
    http协议无状态中的 "状态" 到底指的是什么?!
    Struts2使用流程
    hibernate创建一对多映射关系
    hibernate中创建一对一映射关系
    利用Hibernate进行数据库的增删改查
    Hibernate的简单流程
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3639960.html
Copyright © 2011-2022 走看看