Получить текущие имена специальных папок 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 в реестре и найдите их все.