Сначала я отключаю просмотр всех скрытых файлов и папок через реестр:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
Параметр: Hidden
Значение: 0
Если нажать в контекстном меню windows кнопку "Обновить" то файлы исчезают.
Я же хочу сделать это программным способом.
Пробовал использовать функцию SHChangeNotify
С помощью данных методов пробовал обновить оболочку Windows Explorer в надежде что файлы обновятся и не станут показываться но этого не произошло.
internal static class NativeMethods
{
[DllImport("Shell32.dll")]
public static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);
}
public static void RefreshWindowsExplorer()
{
NativeMethods.SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
}
Пробовал так же использовать данный способ:
public static void Refresh()
{
NativeMethods.SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
Guid CLSID_ShellApplication = new Guid("13709620-C279-11CE-A49E-444553540000");
Type shellApplicationType = Type.GetTypeFromCLSID(CLSID_ShellApplication, true);
object shellApplication = Activator.CreateInstance(shellApplicationType);
object windows = shellApplicationType.InvokeMember("Windows", BindingFlags.InvokeMethod, null, shellApplication, new object[] { });
Type windowsType = windows.GetType();
object count = windowsType.InvokeMember("Count", BindingFlags.GetProperty, null, windows, null);
for (int i = 0; i < (int)count; i++)
{
object item = windowsType.InvokeMember("Item", BindingFlags.InvokeMethod, null, windows, new object[] { i });
Type itemType = item.GetType();
string itemName = (string)itemType.InvokeMember("Name", BindingFlags.GetProperty, null, item, null);
if ((itemName == "Windows Explorer") || (itemName == "File Explorer"))
{
itemType.InvokeMember("Refresh", BindingFlags.InvokeMethod, null, item, null);
}
}
}
Вопрос: Как обновить Всю цепочку Windows Explorer чтобы файлы исчезали из поля зрения?
Решил проблему благодаря функции SHGetSetSettings
От сюда взял необходимый код и немного его видоизменил под себя убрал всё лишнее.
В классе NativeMethods.cs добавил
[DllImport("shell32.dll")]
public extern static void SHGetSetSettings(ref Structures.SHELLSTATE lpss, Structures.SSF dwMask, bool bSet);
Создал класс Structures.cs
internal static class Structures
{
[Flags]
public enum SSF : int
{
SSF_SHOWALLOBJECTS = 0x00000001,
SSF_SHOWSYSFILES = 0x00000020,
SSF_SHOWSUPERHIDDEN = 0x00040000,
}
[StructLayout(LayoutKind.Sequential)]
public struct SHELLSTATE
{
public uint bitvector1, dwWin95Unused, uWin95Unused;
public int lParamSort, iSortDirection;
public uint version, uNotUsed, bitvector2;
public uint FShowAllObjects
{
get => this.bitvector1 & 1;
set => this.bitvector1 = value | this.bitvector1;
}
public uint FShowSuperHidden
{
get => (this.bitvector1 & 0x8000) / 0x8000;
set => this.bitvector1 = (value * 0x8000) | this.bitvector1;
}
}
}
И создал метод который скрывает все скрытые файлы и папки из поля зрения пользователя
public static void HideHiddenFiles(bool bShow)
{
Structures.SHELLSTATE state = new Structures.SHELLSTATE
{
FShowSuperHidden = (uint)(bShow ? 1 : 0)
};
NativeMethods.SHGetSetSettings(ref state, Structures.SSF.SSF_SHOWALLOBJECTS | Structures.SSF.SSF_SHOWSUPERHIDDEN, true);
}
Используется так:
HideHiddenFiles(false) // Скрыть все скрытые файлы и папки
HideHiddenFiles(true) // Показать все скрытые файлы и папки ( к сожалению на win 10 это не сработало, всё обновляется но файлы не показываются :( )
P.S: Если кто-то найдёт решение показа скрытых файлов и папок раньше меня)) напишите пожалуйста.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Имеется код который запускает label и он движется ровно от середины до края
Написал службу Windows на C#При запуске выдается ошибка: Не удалось запустить службу TFFU на Локальный компьютер
В игре есть инвентарь, и при клике на какой-либо слот беру предмет, но перед этим хочу вообще проверить, работает ли клик, и данный код не срабатывает,...