Получить текущие имена специальных папок Windows

Пользователи могут легко переименовывать специальные папки, такие как "Компьютер", "Сеть" и т. Д., По своему вкусу. Также, если компьютер использует другую локаль, имена этих папок также будут другими.

Я хочу получить текущие имена всех специальных папок, таких как "Компьютер", "Корзина", "Сеть" и т. Д. В моем приложении. Есть ли способ сделать это? Конкретный API? Значение реестра?

Например, пользователь переименовывает My Computer в Super Computer, Мое приложение должно показать, что My Computerзовут Super Computer,

1 ответ

Решение

Он не ищет путь к каталогу, ему просто нужно текущее имя ярлыка "Мой компьютер".

Подумайте, щелкните ли вы правой кнопкой мыши на "Мой компьютер", выберите "Переименовать" и задайте имя "Awesome Computer". Как вы можете найти это значение через C#?

Если я открываю regedit и выполняю "Find" на "Awesome Computer", возвращается следующее:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}

Вы можете получить это значение в C#, используя метод Registry.GetValue. Вы можете найти путь к сети, корзине и т. Д., Используя тот же метод, задав для них уникальное имя и выполнив поиск в реестре.

Обновить

Похоже, что если пользователь не переименовал Мой компьютер, и он по-прежнему установлен по умолчанию, то значение реестра будет нулевым. В этом случае вы можете посмотреть следующее значение реестра, чтобы найти имя по умолчанию:

HKEY_USERS\S-1-5-21-1070759151-1144338347-1905203885-52919\Software\Microsoft\Windows\ShellNoRoam\MUICache
@C:\WINDOWS\system32\SHELL32.dll,-9216

Вот список различных значений по умолчанию:

8503 S & earch... 8964 Корзина 9216 Мой компьютер 9217 Мое сетевое окружение 9227 Мои документы 9319 Принтеры и факсы

Просто найдите значение @C:\WINDOWS\system32\SHELL32.dll в реестре и найдите их все.

Другие вопросы по тегам