Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Question] Как деактивировать только некоторые глобальные клавиши Windows? #5

Closed
Kristinita opened this issue Nov 21, 2016 · 11 comments
Labels

Comments

@Kristinita
Copy link

Возможно, на nnCron это получится сделать.

Цель

Деактивировать только некоторые глобальные горячие клавиши Windows 10, чтобы можно было бы использовать их для запуска команд в других приложениях.

Подробно

Положим, я не пользуюсь горячими клавишами Win+K, Win+H и Ctrl+Win+P. Неплохо было бы деактивировать только их и запускать данными сочетаниями команды редактора Sublime Text.

Но мне не нужно деактивировать все глобальные шорткаты. Некоторыми, как Win+R и Win+D я активно пользуюсь.

Не помогло

Попытки решить задачу при помощи Реестра Windows, редактора локальной групповой политики, AutoHotkey и других программ оказались безуспешными, см. мой вопрос на Super User.

Спасибо.

@VoidVolker
Copy link
Member

VoidVolker commented Jan 20, 2017

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

  1. Используя ремаппер клавиш заменил код клавиши Win на код другой (в реестре есть ScanCodeMap), не используемой клавиши - например 0xB3.
  2. Сделал свои хоткеи в кронтабе ннкрона, которые обрабатывают данный код.

И все - проблемы нет вообще.

#( Пример_задачи
\ NoActive
SingleInstance
WatchHotKey: "{0xB3}"  \ 179
Action:
\ ... что-то делаем
)#

@Kristinita
Copy link
Author

@VoidVolker Что-то совсем непросто... Можно реальные примеры? Например, назначить хоткей с использованием клавиши Win в Sublime Text.

Для ремаппинга я пользовался программой SharpKeys. Заменил сканкод Left Win на сканкод любой неиспользуемой клавиши, например, 0x0074. (0xB3 не нашёл).

0x0074

→ перезагрузил компьютер.

Теперь клавиша Win не работает нигде, хоткеи в программах (а их много), в которых содержится Win, не работают.

Что дальше, не очень понимаю. Придётся каждый хоткей, содержащий Win, писать в кронтабе, а не в Sublime Text?

Спасибо.

@VoidVolker
Copy link
Member

Теперь клавиша Win не работает нигде, хоткеи в программах (а их много), в которых содержится Win, не работают.

Само собой - ведь теперь данной клавиши на клавиатуре как бы вообще не существует. Поэтому все хоткеи привязанные к ней не будут работать.

Судя по всему в ST используется фиксированный список хоткеев в виде их имен - так что использовать нестандартные коды там нельзя (возможно существует какой-нибудь плагин). Таким образом надо либо ловить хоткей в ннкроне и генерировать им новый хоткей для ST (что не удобно), либо заменить код на код используемой клавиши и сделать хоткей в ST на эту кнопку.
Например F12-F20 - эти в спике есть: http://docs.sublimetext.info/en/latest/reference/key_bindings.html#bindable-keys

@Kristinita
Copy link
Author

@VoidVolker , я могу клавише Win сделать сканкод как у условной клавиши F20 (на моей клавиатуре отсутствует). Но Win — служебная клавиша, F20 — нет. Сочетание Win+K будет работать, F20+K — нет. Это можно как-нибудь разрешить?

Спасибо.

@VoidVolker
Copy link
Member

Сделать задачу в ннкроне, которая делает то же самое, что Win+K, либо отправляет хоткей Win+K.

@lpslp
Copy link

lpslp commented Nov 8, 2019

попал сюда в поисках решения как выключить появившиеся в win10 1909 новые хоткеи
сам использую вот это http://forum.tordex.com/thread-3130.html это плагин именно освобождает hotkey - тоесть это значит что это в принципе возможно. Автор плагина на запросы доделать плагин для новых хоткеев - не отвечает.
Но суть в том это это возможно осталось упросить автора обновить плаг ин или найти что то такое же, вот какие именно можно освободить http://prntscr.com/puezen

@VoidVolker
Copy link
Member

Судя по всему - это программа, при этом для работы ей нужно быть запущеной. Из этого я могу предположить только то, что она тупо вешает хук на хоткей и не даёт ему пройти дальше. Или еще как-то вклинивается в работу хуков на клавиши. А хоткеи, вроде бы, работают от проводника или в его контексте.
А просто отключение системных хоткеев не помогает? Типа такого: https://windowsreport.com/disable-keyboard-shortcuts-windows-8/

@lpslp
Copy link

lpslp commented Nov 10, 2019

А просто отключение системных хоткеев не помогает? Типа такого:

все это пробовал естественно. я с этим вопросом провел много часов в гугле - к примеру конкретно сюда я вообще попал из https://superuser.com/ ....

что она тупо вешает хук на хоткей и не даёт ему пройти дальше.

фишка в том что у него получилось их ОСВОБОДИТЬ - тоесть их (сочетания) можно использовать в любых программах. ТОесть обычно как это выглядит к примеру в https://sourceforge.net/projects/hotkeyp/ вешается глоабльный хук и можно назначить хоткеи только в программе где висит хук - а тут он этим плагином делает эти хоткеи доступные во всех программах!

@VoidVolker
Copy link
Member

VoidVolker commented Nov 11, 2019

Хуки собираются в список и у установленного хука есть возможность как запуска следующего хука так и его игнорирование. Т.о., чисто теоретически можно сделать следующее:

  1. Остановить процесс, который ставит хук с системным хоткеем
  2. Поставить первый хук
  3. Запустить процесс, который ставит свой хук на системный хоткей
  4. Поставить второй хук

И т.о., первым хуком игнорировать запуск следующего хука и запускать второй хук, чтобы очередь не прерывалась. Но это все чисто теоретически - т.к. надо закапываться в системную документацию и выяснять можно ли так сделать на практике. Возможно, та программа как-то внедряется в системные процессы или внедряет какой-то свой код куда-то. Были бы исходники и/или описание процесса - можно было бы легко сделать. А без них - только заниматься реверсингом приложения. На хабре есть много статей тему реверсинга - думаю можно обратиться к авторам этих статей за помощью с реверсингом данной утилиты с целью разобраться с этим механизмом.

@Kristinita
Copy link
Author

@lpslp , отпишитесь, пожалуйста, если нашли какое-нибудь приемлемое решение.

Спасибо.

@lpslp
Copy link

lpslp commented Jan 9, 2020

@lpslp , отпишитесь, пожалуйста, если нашли какое-нибудь приемлемое решение.

Спасибо.

эм, решения нет.
Именно высвободить все микрософтовские бинды я не нашел как (дополнительно к True Launch Bar - она высвобождает и так не мало...). Как переназначить уже писал выше про https://sourceforge.net/projects/hotkeyp/ - она может перебить любой микрософтовый хоткей.
В общем читайте выше - кроме того что написал ничего не добавилось - я еще тогда достаточно много времени потратил на поиски...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants