上一次经过palmax的指点,使用SHGetSetSettings函数可以实现刷新,但是,该函数在Win2k下无效,据msdn中对SHGetSetSettings的介绍:“This function is available through Microsoft Windows XP Service Pack 2 (SP2) and Windows Server 2003. It might be altered or unavailable in subsequent versions of Windows.”,Win2k的注册表也有相应的选项:
[code=INIFile]
Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"Hidden"=dword:00000002
"ShowCompColor"=dword:00000000
"HideFileExt"=dword:00000001
"DontPrettyPath"=dword:00000000
"ShowInfoTip"=dword:00000001
"HideIcons"=dword:00000000
"MapNetDrvBtn"=dword:00000000
"WebView"=dword:00000001
"Filter"=dword:00000000
"SuperHidden"=dword:00000000
"SeparateProcess"=dword:00000000
"StartButtonBalloonTip"=dword:00000001
"StartMenuInit"=dword:00000001
[/code]求在Win2k下的实现方法。

解决方案 »

  1.   

    通过使用spy++等工具监测,现给出终极方法:(修改注册表 + WM_SETTINGCHANGE 通知更新)
    bool ShowAllFilesInExplorer(bool bShowHidden/*对应[显示所有的文件和文件夹]*/, bool bShowSysProtected/*对应[显示受操作系统保护的文件]*/)
    {
    HKEY hKey = {0};
    bool bRet = true; if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"), 0, KEY_SET_VALUE, &hKey))
    {
    DWORD dwShowHidden = bShowHidden ? 1 : 2;
    DWORD dwShowSysProtected = bShowSysProtected ? 1 : 0; if (ERROR_SUCCESS != ::RegSetValueEx(hKey, TEXT("Hidden"), 0, REG_DWORD, (LPBYTE)&dwShowHidden, (DWORD)sizeof(dwShowHidden)) 
    || 
    ERROR_SUCCESS != ::RegSetValueEx(hKey, TEXT("ShowSuperHidden"), 0, REG_DWORD, (LPBYTE)&dwShowSysProtected, (DWORD)sizeof(dwShowSysProtected)))
    {
    bRet = false;
    } ::RegCloseKey(hKey);
    }
    else
    {
    bRet = false;
    } if (bRet)
    {
    ::SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)TEXT("ShellState"), SMTO_ABORTIFHUNG, 3000, NULL);
    ::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
    } return bRet;
    }