Вопрос или проблема
Мне нужно программно определить, какие приложения регистрируют глобальные горячие клавиши в Windows 10, особенно чтобы отладить конфликты с сочетаниями клавиш для скриншотов в ShareX (PrintScreen
и Alt+PrintScreen
).
Текущая ситуация
- ShareX показывает ошибку при запуске Windows о невозможности регистрации горячей клавиши
- Конфликтующие сочетания:
[Print Screen]
для захвата всего экрана[Alt + Print Screen]
для захвата активного окна
Что я ищу
- Решение в командной строке (PowerShell/CMD) для списка всех зарегистрированных глобальных горячих клавиш и (предпочтительно) их связанных приложений
- Метод для определения, какое приложение в настоящее время занимает определенные сочетания клавиш
- Предпочтительно способ программно освободить/отменить регистрацию этих горячих клавиш
Что я попробовал
- Ручные попытки и ошибки при закрытии приложений (не идеально)
- Основные команды PowerShell, такие как
Get-Process
(не показывают регистрацию горячих клавиш)
Есть ли способ запросить Windows API или использовать системные инструменты, чтобы получить эту информацию? Меня особенно интересует программное решение, а не ручные шаги отладки или программное обеспечение сторонних производителей.
В комментариях вы упомянули, что вас интересуют инструменты, которые перечисляют все активные горячие клавиши, даже если такие инструменты не показывают, какие приложения их используют (что было бы, конечно, идеально).
Один из таких инструментов – HotKeysList от Nira Sofera. HotKeysList – это бесплатное программное обеспечение (добровольные пожертвования принимаются здесь). Это портативное приложение (не требует установки и не изменяет вашу систему).
Вы можете использовать HotKeysList как CLI или GUI инструмент. Поскольку вы указали, что предпочитаете CLI, я предоставлю детали для этого использования: просто запустите hotkeyslist.exe
с любым из следующих параметров CLI:
/stext <Filename> Сохранить список зарегистрированных горячих клавиш в простой текстовый файл.
/stab <Filename> Сохранить список зарегистрированных горячих клавиш в текстовый файл с табуляцией.
/scomma <Filename> Сохранить список зарегистрированных горячих клавиш в файл с разделителями-запятыми (csv).
/stabular <Filename> Сохранить список зарегистрированных горячих клавиш в табличный текстовый файл.
/shtml <Filename> Сохранить список зарегистрированных горячих клавиш в HTML файл (горизонтально).
/sverhtml <Filename> Сохранить список зарегистрированных горячих клавиш в HTML файл (вертикально).
/sxml <Filename> Сохранить список зарегистрированных горячих клавиш в XML файл.
Источник таблицы выше: https://www.nirsoft.net/utils/hot_keys_list.html
Это экспортирует список активных горячих клавиш в файл в указанном формате. Затем вы можете обрабатывать этот выходной файл с помощью любого языка программирования или инструментов текстовой обработки по вашему выбору. Один из таких инструментов – GetNir и другой CSVFileView.
Ответ или решение
Вопрос о том, как программно определить, какие приложения регистрируют глобальные горячие клавиши в Windows 10, особенно при возникновении конфликтов с горячими клавишами ShareX, является довольно сложной задачей. ShareX часто генерирует ошибки при попытке регистрации горячих клавиш PrintScreen и Alt+PrintScreen, которые уже могут быть заняты другим приложением. Далее рассмотрим теоретическую базу, существующие возможности и шаги, которые помогут в решении этой задачи.
Теоретическая Основа
Глобальные горячие клавиши в Windows регистрируются отдельными приложениями по протоколам, которые управляются через Windows API. Конфликты могут возникать, когда несколько приложений пытаются использовать одну и ту же горячую клавишу. В самом ядре Windows нет встроенной утилиты для управления этими регистрациями, что создаёт проблемы для обнаружения источников этих конфликтов через стандартные командные средства Windows.
Пример Используемых Инструментов
Существует ряд внешних утилит, которые предоставляют ограниченный доступ к списку зарегистрированных горячих клавиш. Одной из таких утилит является HotKeysList от NirSoft, который может с помощью простых команд позволить пользователю увидеть, какие горячие клавиши активны в данный момент. Однако важно отметить, что даже этот инструмент не всегда может точно определить, какое именно приложение зарегистрировало ту или иную горячую клавишу.
Командные параметры для использования HotKeysList:
hotkeyslist.exe /stext <ИмяФайла>
— сохранение списка в текстовый файл.hotkeyslist.exe /scomma <ИмяФайла>
— сохранение в CSV (comma-delimited) файл.
Эти параметры позволяют экспортировать текущий список активных горячих клавиш в файл, который может быть дополнительно обработан в удобном для вас формате с помощью языков программирования или инструментов работы с текстами, таких как PowerShell или Python.
Применение и Практическое Решение
1. Использование NirSoft HotKeysList
- Загрузите и запустите утилиту HotKeysList. Это портативная утилита, не требующая установки.
- Как указано выше, используйте командные параметры для сохранения списка зарегистрированных горячих клавиш в файл.
- Проанализируйте полученный файл для поиска нужных горячих клавиш (PrintScreen и Alt+PrintScreen), чтобы определить текущие конфликты.
2. Проверка Системных Ресурсов
- Используйте PowerShell для получения списка запущенных процессов, чтобы сузить круг приложений, которые могут быть заинтересованы в использовании проблемных горячих клавиш.
- Командлет
Get-Process
может дать общее представление о работающих приложениях, хотя он и не предоставляет информации о горячих клавишах.
3. Закрытие Необходимых Программ
- После идентификации потенциальных виновников конфликта, начните поочередно закрывать соответствующие приложения, проверяя, исчезает ли ошибка в ShareX. Хотя этот метод не программный, он может быть полезным для первоначальной диагностики.
4. Удаление Конфликтующих Регистраций
- На данный момент не существует широко известного метода для программного снятия горячих клавиш конкретного приложения в обход его собственного интерфейса. Возможные решения включают изменение настроек самих приложений или использование сторонних программ для управления горячими клавишами.
Заключение
Хотя существующие на данный момент инструменты не предоставляют полной программируемой возможности для точной идентификации и освобождения горячих клавиш, использование таких утилит, как HotKeysList, может существенно упростить процесс диагностики проблем. Внедрение таких подходов требует изучения и опыта работы с Windows API и может побудить разработчиков создавать более совершенные инструменты для управления этим процессом в будущем.