Rebuild Shell Icon Cache

void  BroadcastChanges ( void )
{
    DWORD dwResult;

    SendMessageTimeout (
        HWND_BROADCAST,
        WM_SETTINGCHANGE,
        SPI_SETNONCLIENTMETRICS,
        (LPARAM) _T(
" WindowMetrics " ),
        
// SMTO_NORMAL|
        SMTO_ABORTIFHUNG,
        
10000 ,
        
& dwResult);
}

void  RefreshScreenIcons ( void )
{
    
bool  bResult  =   false ;
    LPCTSTR pszKeyName 
=  _T( " Control Panel\\Desktop\\WindowMetrics " );
    LPCTSTR pszKeyValue 
=  _T( " Shell Icon Size " );
    HKEY hKey;
    TCHAR szShellIconSize[
32 ];

    
if  (ERROR_SUCCESS  ==  ::RegOpenKey (HKEY_CURRENT_USER, pszKeyName,
        
& hKey))
    {
        DWORD dwType;
        DWORD cbShellIconSize 
=   sizeof  szShellIconSize;

        
if  (ERROR_SUCCESS  ==  ::RegQueryValueEx (hKey, pszKeyValue, NULL,
            
& dwType, (LPBYTE) szShellIconSize,  & cbShellIconSize))
        {
            TCHAR szNewShellIconSize[
32 ];
            wsprintf (szNewShellIconSize, _T(
" %d " ), _wtoi (szShellIconSize)  -   1 );

            
if  (ERROR_SUCCESS  ==  ::RegSetValueEx (hKey, pszKeyValue,  0 , REG_SZ,
                (LPBYTE) szNewShellIconSize, _tcslen (szShellIconSize)))
            {
                bResult 
=   true ;
            }
        }

        ::RegCloseKey (hKey);

        
if  (bResult)
        {
            BroadcastChanges();
        }
    }

    
if  (bResult)
    {
        
if  (ERROR_SUCCESS  ==  ::RegOpenKey (HKEY_CURRENT_USER, pszKeyName,
            
& hKey))
        {
            
if  (ERROR_SUCCESS  !=  ::RegSetValueEx (hKey, pszKeyValue,  0 , REG_SZ,
                (LPBYTE) szShellIconSize, _tcslen (szShellIconSize)))
            {
                bResult 
=   false ;
            }

            ::RegCloseKey (hKey);

            
if  (bResult)
            {
                BroadcastChanges ();
            }
        }
        
else
        {
            bResult 
=   false ;
        }
    }
}

转载于:https://www.cnblogs.com/Sunwayking/articles/1603128.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值