
Я использовал сочетания клавиш для некоторых папок еще в Windows 7. Недавно я начал использовать Windows 8, сейчас использую Windows 8.1.
Кажется, есть проблема с сочетаниями клавиш в C:\Users\username\Links
папке. Я назначаю сочетание клавиш, но оно не работает. Однако любое другое сочетание клавиш для любой папки работает нормально. Я не могу использовать сочетание клавиш только для тех, что в Links
папке.
Как решить эту проблему?
Редактировать
Я попробовал несколько обходных путей, но они не сработали:
Я вырезал ярлык из папки Links, вставил его на рабочий стол. То же сочетание клавиш не сработало. Я изменил сочетание клавиш на что-то другое (кстати, я уверен, что сочетания клавиш не назначены на что-то другое), и оно сработало с другим сочетанием клавиш. Я переместил его обратно в папку Links, оно не сработало. Я снова изменил сочетание клавиш на что-то другое. Я думал, что на этот раз оно сработает, но даже несмотря на то, что сочетание клавиш перемещено обратно в папку Links и переназначено на другое сочетание клавиш, оно сработалонетработа.
решение1
Тесты
Замена сочетания клавиш
Я провел несколько тестов и получил несколько интересных и очень показательных результатов. Я провел тест в Windows ME (это была самая ранняя версия Windows, которая у меня была на руках в то время), и повторил его с XP, а затем с 7. Вот что я сделал, и вы можете повторить это:
- Создайте ярлык калькулятора на рабочем столе, дайте ему имя
C
и назначьте ему неиспользуемую горячую клавишу. - Проверьте работу горячих клавиш
- Создайте ярлык для Блокнота в
Links
папке, назовите егоN
и назначьте ему другую, неиспользуемую горячую клавишу. - Подтвердите, что горячая клавиша работаетнетработа
- Удалить ярлык калькулятора с рабочего стола
- Переместите ярлык Блокнота из папки
Link
на рабочий стол и переименуйте его вC
- Нажмите горячую клавишу, назначеннуюоригинальныйярлык для калькулятора
- Обратите внимание, что он запускает Блокнот.
Это происходит в Windows ME и XP, но в Windows 7 нажатие любой из горячих клавиш в конечном итоге ничего не дает.
Внутренний формат горячих клавиш
Из этого можно сделать вывод, что когда вы назначаете горячую клавишу сочетанию клавиш, она назначает ее полному пути к сочетанию клавиш. Например, в приведенном выше тесте назначение горячей клавиши Alt+ ⇧Shift+ Cсочетанию клавиш калькулятора заставит Windows зарегистрировать что-то вроде этого внутри:
C A S W K P
- + + - C "C:\…\Foobar\Desktop\C.lnk"
Поэтому, если вы удалите (или переместите или переименуете) ярлык, нажатие клавиши попытается запустить ярлык, которого не существует. Любопытно, что если вы отслеживаете доступ к файлам в Process Explorer, вы не увидите FILE NOT FOUND
ошибок при попытке доступа к отсутствующему ярлыку, но если вы восстановите ярлык, вы увидите, что он снова будет доступен при нажатии горячей клавиши.
Автоматическое управление горячими клавишами
Кроме того, тот факт, что Windows 7 не запускает скопированный ярлык, по-видимому, указывает на то, что Explorer выполняет своего рода управление горячими клавишами при перемещении, переименовании или удалении ярлыков, но, конечно, существуют ограничения на то, что он может делать. (Например, если два ярлыка имеют общую горячую клавишу, удаление того, у которого она есть, не приведет к внезапному переназначению горячей клавиши другому, вам нужно вручную открыть этот ярлык.Характеристики(Диалоговое окно и щелкните [OK]
, чтобы сделать это.)
Ссылки-папка Перенаправление
Затем я подумал о перенаправлении Links
папки (рисунок 1). Я попробовал перенаправить ее, а затем скопировать перемещенную папку обратно в исходное местоположение. Я обнаружил, что горячие клавиши не работают для ярлыков ни в одной из папок. Затем я попробовал снять атрибуты с папок и даже удалить desktop.ini
из них файлы, предполагая, что Windows относится к ним по-особенному, но это не помогло. Затем я создал новую обычную папку в папке user-data и, к моему удивлению, горячие клавишивсе ещене сработает.
Горячие клавиши быстрого доступа по всей файловой системе
Затем я попробовал сделать это с ярлыком на другом диске, и все равно ничего. Я попробовал назначить горячие клавиши ярлыкам в нескольких разных местах в Windows 7, и только ярлыки, которые были в папках Desktop
или Start Menu
или в одном из их подкаталогов, могли использовать горячие клавиши.
Выводы
Похоже, что функция горячих клавиш Explorer для ярлыков крайне ограничена и работает только для меню «Пуск» и рабочего стола. Я не знаю, является ли это ошибкой или намеренным, потому что я не могу найти никаких упоминаний об ограничении. Собственныестраница по теменичего об этом не говорится. (Сообщите им об этом черезформа для обратной связи. Я нажал [No]
и отправил ссылку на эту страницу.) Нет никаких оснований полагать, что в Windows 8 или 8.1 или, возможно, даже в будущих версиях ситуация будет иной (при условии, что в них вообще сохранится Explorer).
Рекомендации
Вы могли бы (попытаться)доложите об этом, но я бы не стал надеяться, что это исправят. Было бы быстрее и проще просто хранить ярлыки, которым нужны горячие клавиши, в другой папке.
Рисунок 1: Ссылки-настройка местоположения:
решение2
Недавно я задавал похожий вопрос, и я уже нашел ответ, так что, думаю, я и есть ответ здесь. Мой вопрос был больше о внутренней функции управления горячими клавишами сочетаний клавиш Windows и о том, что и как. Можно ли добавлять папки в список? Есть ли менее известные папки, куда можно помещать сочетания клавиш с горячими клавишами? В конце концов, я просто подтвердил то, что уже было известно, но вот как я это сделал.
Моя первая попытка разобраться в этом заключалась в том, чтобы посмотреть наПрокмонследы explorer.exe
. Procmon — это утилита, которая отслеживает доступ к файлам и реестру, и я пришел к выводу, что процесс, похоже, не искал никаких дополнительных путей в реестре.
Не совсем удовлетворившись, я вспомнил, что естьУтечка исходного кода Windows 2000 около 10 лет назад. Я отследил это и посмотрел на логику в этом коде. Оказывается, что горячие клавиши для сочетаний клавиш управляются в двух местах.
- При изменении свойств ярлыка.При нажатии OK или применить в диалоговом окне свойств ярлыка Windows проверяет, является ли папка ярлыка или ее подпапкой фиксированного списка папок. Этот список
CSIDL_PROGRAMS
,CSIDL_COMMON_PROGRAMS
,CSIDL_STARTMENU
,CSIDL_COMMON_STARTMENU
,CSIDL_DESKTOPDIRECTORY
,CSIDL_COMMON_DESKTOPDIRECTORY
как указано вНотация CSIDL(Каждый элемент CSIDL в конечном итоге ищется в значении реестра, если только он не кэширован где-то. Я не искал подробности реализации этого.) Если сочетание клавиш находится в одном из этих мест, горячая клавиша регистрируется, и, если применимо, старая горячая клавиша стирается. - Когда
explorer.exe
начнется.В другой части кода все элементы меню «Пуск», а также все элементы рабочего стола перечисляются приexplorer.exe
первом запуске процесса. Перечисление этих двух различных путей выполняется в разных функциях. Функция, перечисляющая элементы в папке меню «Пуск», является рекурсивной, и эта функция также обрабатывает кэширование значков. Функция, перечисляющая элементы на рабочем столе, не является рекурсивной, а проверяет только саму папку рабочего стола.
Никаких попыток перемещения или удаления ярлыка не предпринимается.
Это объясняет некоторые странности поведения, например:
- При перемещении или удалении ярлыка из допустимого местоположения горячая клавиша остается в памяти, и ее нажатие вслепую попытается запустить теперь несуществующий ярлык. (Пока
explorer.exe
существует текущий процесс.) - Аналогично, если вы переместите ярлык с помощью горячей клавиши в допустимую папку, это не будет обнаружено до следующего сеанса или до тех пор, пока вы не отредактируете свойства ярлыка.
- Если вы создадите ярлык в подпапке на рабочем столе, он будет работать в текущем
explorer.exe
сеансе, поскольку нажатие OK/применить добавляет горячую клавишу в соответствии с механизмом 1 выше. Однако в следующем сеансе эта горячая клавиша не будет добавлена, поскольку ярлык находится в подпапке, в которуюexplorer.exe
не происходит рекурсия при первом запуске процесса.
В конце концов, я в основном подтвердил то, что было известно, но приятно знать,почему.
решение3
Верный способ создания ярлыков, которые всегда работают, — это использоватьAutoHotkey.
Поскольку сочетания клавиш AutoHotkey на самом деле являются макросами, они не только гарантированно работают всегда и везде, но и могут выполнять гораздо более сложные задачи, чем просто запуск программы.
решение4
Есть еще один вопрос, связанный с этим:медленные сочетания клавиш рабочего стола windows.
Завершение спящих приложений отменяет тайм-аут.