windows-nt/Source/XPSP1/NT/shell/ext/webvw/install.cpp
2020-09-26 16:20:57 +08:00

128 lines
3.5 KiB
C++

#include "priv.h"
HRESULT RegisterActiveDesktopTemplates()
{
HRESULT hr = E_FAIL;
TCHAR szPath[MAX_PATH];
if (GetWindowsDirectory(szPath, ARRAYSIZE(szPath)) &&
PathAppend(szPath, TEXT("web")))
{
// we still register safemode.htt and deskmovr.htt for Active Desktop.
if (PathAppend(szPath, TEXT("safemode.htt")))
{
hr = SHRegisterValidateTemplate(szPath, SHRVT_REGISTER);
}
else
{
hr = ResultFromLastError();
}
if (SUCCEEDED(hr))
{
if (PathRemoveFileSpec(szPath) && PathAppend(szPath, TEXT("deskmovr.htt")))
{
hr = SHRegisterValidateTemplate(szPath, SHRVT_REGISTER);
}
else
{
hr = ResultFromLastError();
}
}
}
return hr;
}
HRESULT FixMyDocsDesktopIni()
{
HRESULT hr = E_FAIL;
TCHAR szMyDocsIni[MAX_PATH];
if ((SHGetFolderPath(NULL, CSIDL_MYPICTURES, NULL, SHGFP_TYPE_CURRENT, szMyDocsIni) == S_OK) &&
PathAppend(szMyDocsIni, TEXT("desktop.ini")))
{
// The default PersistMoniker is automatically determined by the shell.
// So, lets clear the old settings.
WritePrivateProfileString(TEXT("{5984FFE0-28D4-11CF-AE66-08002B2E1262}"),
TEXT("WebViewTemplate.NT5"),
NULL,
szMyDocsIni);
WritePrivateProfileString(TEXT("{5984FFE0-28D4-11CF-AE66-08002B2E1262}"),
TEXT("PersistMoniker"),
NULL,
szMyDocsIni);
WritePrivateProfileString(TEXT("ExtShellFolderViews"),
TEXT("Default"),
NULL,
szMyDocsIni);
hr = S_OK;
}
return hr;
}
HRESULT SetFileAndFolderAttribs(HINSTANCE hInstResource)
{
TCHAR szWinPath[MAX_PATH];
TCHAR szDestPath[MAX_PATH];
int i;
const LPCTSTR rgSuperHiddenFiles[] =
{
TEXT("winnt.bmp"),
TEXT("winnt256.bmp"),
TEXT("lanmannt.bmp"),
TEXT("lanma256.bmp"),
TEXT("Web"),
TEXT("Web\\Wallpaper")
};
GetWindowsDirectory(szWinPath, ARRAYSIZE(szWinPath));
// Change the attributes on "Winnt.bmp", "Winnt256.bmp", "lanmannt.bmp", "lanma256.bmp"
// to super hidden sothat they do not showup in the wallpaper list.
for (i = 0; i < ARRAYSIZE(rgSuperHiddenFiles); i++)
{
lstrcpyn(szDestPath, szWinPath, ARRAYSIZE(szDestPath));
PathAppend(szDestPath, rgSuperHiddenFiles[i]);
if (PathIsDirectory(szDestPath))
{
PathMakeSystemFolder(szDestPath);
}
else
{
SetFileAttributes(szDestPath, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
}
}
const int rgSysetemFolders[] =
{
CSIDL_PROGRAM_FILES,
#ifdef _WIN64
CSIDL_PROGRAM_FILESX86
#endif
};
// make the "Program Files" and "Program Files (x86)" system folders
for (i = 0; i < ARRAYSIZE(rgSysetemFolders); i++)
{
if (SHGetFolderPath(NULL, rgSysetemFolders[i], NULL, 0, szDestPath) == S_OK)
{
PathMakeSystemFolder(szDestPath);
}
}
// Fix up desktop.ini for My Pictures until we completely stop reading from it
FixMyDocsDesktopIni();
// register the last two .htt files that Active Desktop still uses
RegisterActiveDesktopTemplates();
return S_OK;
}