[BOOT][SHELL32][INCLUDE] Support 'SuperHidden' files (#2102)

PR #2101 shows desktop.ini files on Desktop. I want to hide them.
- Add "ShowSuperHidden" setting to Explorer.
- Add SHCONTF_INCLUDESUPERHIDDEN flag.
- Support SHCONTF_INCLUDESUPERHIDDEN in Explorer.
CORE-10045
This commit is contained in:
Katayama Hirofumi MZ 2019-11-29 15:14:18 +09:00 committed by GitHub
parent 2c272a9017
commit 5734570a15
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 19 deletions

View file

@ -1892,6 +1892,7 @@ HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","ListviewShad
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","HideFileExt",0x00010003,0x00000000
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","StartMenuLogoff",0x00010003,0x00000001
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","Hidden",0x00010003,1
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","ShowSuperHidden",0x00010003,0
; ComDlg32
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32",,0x00000012

View file

@ -908,29 +908,32 @@ HRESULT CDefView::FillList()
DWORD dwFetched;
HRESULT hRes;
HDPA hdpa;
HKEY hKey;
DWORD dFlags = SHCONTF_NONFOLDERS | SHCONTF_FOLDERS;
DWORD dwValue, cbValue;
TRACE("%p\n", this);
/* determine if there is a setting to show all the hidden files/folders */
if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
dwValue = 1;
cbValue = sizeof(dwValue);
SHGetValueW(HKEY_CURRENT_USER,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
L"Hidden", NULL, &dwValue, &cbValue);
if (dwValue == 1)
{
DWORD dataLength, flagVal;
dFlags |= SHCONTF_INCLUDEHIDDEN;
m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
}
dataLength = sizeof(flagVal);
if (RegQueryValueExW(hKey, L"Hidden", NULL, NULL, (LPBYTE)&flagVal, &dataLength) == ERROR_SUCCESS)
{
/* if the value is 1, then show all hidden files/folders */
if (flagVal == 1)
{
dFlags |= SHCONTF_INCLUDEHIDDEN;
m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
}
}
/* close the key */
RegCloseKey(hKey);
dwValue = 0;
cbValue = sizeof(dwValue);
SHGetValueW(HKEY_CURRENT_USER,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
L"ShowSuperHidden", NULL, &dwValue, &cbValue);
if (dwValue)
{
dFlags |= SHCONTF_INCLUDESUPERHIDDEN;
m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
}
/* get the itemlist from the shfolder */

View file

@ -391,10 +391,16 @@ HRESULT WINAPI CFileSysEnum::Initialize(LPWSTR lpszPath, DWORD dwFlags)
{
BOOL findFinished = FALSE;
#define HIDDEN FILE_ATTRIBUTE_HIDDEN
#define SUPER_HIDDEN (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)
do
{
if ( !(stffile.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
|| (dwFlags & SHCONTF_INCLUDEHIDDEN) )
if ((stffile.dwFileAttributes & HIDDEN) == 0 ||
((dwFlags & SHCONTF_INCLUDEHIDDEN) &&
(stffile.dwFileAttributes & SUPER_HIDDEN) == HIDDEN) ||
((dwFlags & SHCONTF_INCLUDESUPERHIDDEN) &&
(stffile.dwFileAttributes & SUPER_HIDDEN) == SUPER_HIDDEN))
{
LPITEMIDLIST pidl = NULL;

View file

@ -176,7 +176,12 @@ interface IShellFolder : IUnknown
SHCONTF_INIT_ON_FIRST_NEXT = 256,
SHCONTF_NETPRINTERSRCH = 512,
SHCONTF_SHAREABLE = 1024,
SHCONTF_STORAGE = 2048
SHCONTF_STORAGE = 2048,
SHCONTF_NAVIGATION_ENUM = 0x01000,
SHCONTF_FASTITEMS = 0x02000,
SHCONTF_FLATLIST = 0x04000,
SHCONTF_ENABLE_ASYNC = 0x08000,
SHCONTF_INCLUDESUPERHIDDEN = 0x10000
};
typedef DWORD SHCONTF;