我之所以强调模拟右键刷新,是因为我发现,只有右键刷新是最全的刷新功能,我之前试了一个代码,对于扩展名的显示或隐藏,刷新不出来。 
从注册表更改扩展名的显示或隐藏,位置是 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 
HideFileExt的值,改为0是显示扩展名,改为1是隐藏扩展名。 
但是从注册表里更改的话,桌面上图标名称不会立即生效,必须右键刷新一下(按F5都不行),我所找到的刷新代码也不行,谁可以解决此问题??我会追加分,谢谢。

解决方案 »

  1.   

    依靠 IActiveDesktop的成员方法 HRESULT   hr; 
    USES_CONVERSION; 
    IActiveDesktop *pActiveDesktop; 
    hr = CoCreateInstance(CLSID_ActiveDesktop,NULL,CLSCTX_INPROC_SERVER,IID_IActiveDesktop,(void**)&pActiveDesktop); 
    if(hr==S_OK){ 
    COMPONENTSOPT opt; 
    opt.dwSize = sizeof(opt); 
    opt.fActiveDesktop =  opt.fEnableComponents = 0; 
    HRESULT hr = pActiveDesktop-> SetDesktopItemOptions(&opt,0); pActiveDesktop-> ApplyChanges(AD_APPLY_REFRESH); 
    opt.fActiveDesktop =  opt.fEnableComponents = TRUE; 
     hr = pActiveDesktop-> SetDesktopItemOptions(&opt,0); 
     WCHAR wszPath[MAX_PATH]; 
     CString strPath="c:\\a.html"; 
     LPTSTR lpStr = strPath.GetBuffer(strPath.GetLength()); 
     MultiByteToWideChar(CP_ACP, 0, lpStr, -1, wszPath, MAX_PATH); 
     strPath.ReleaseBuffer(); 
     hr = pActiveDesktop-> SetWallpaper(wszPath, 0); 
      pActiveDesktop-> ApplyChanges(AD_APPLY_ALL); 
     pActiveDesktop-> ApplyChanges(AD_APPLY_REFRESH); } 
    pActiveDesktop-> Release(); 
      

  2.   

    试试:
    SHChangeNotify(SHCNE_ASSOCCHANGED ,  SHCNF_FLUSH or SHCNF_FLUSHNOWAIT  or SHCNF_DWORD ,  PChar('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced'),  NiL);