Я хочу иметь возможность сопоставить клавишу Caps Lock с Escape, если она не нажата с любой другой клавишей, и Control, если она есть. Как я могу сделать это на Windows 7?
8 ответов
Вы можете переназначить его на Escape с помощью SharpKeys
Однако я не знаю реалистичного способа выполнения условного переназначения, кроме написания драйвера клавиатуры.
Это не совсем то, что вы хотите, но очень близко, если вы можете жить с некоторыми недостатками. Вот скрипт AutoHotKey :
$CapsLock::LControl
$CapsLock Up::Send {Escape}
return
Он переназначает Caps Lock на Ctrl и отправляет Escape, когда вы отпускаете клавишу. Мне потребовалось некоторое время, чтобы привыкнуть к нажатию клавиши Escape каждый раз, когда я отпускаю клавишу Caps Lock. Тем не менее, это в значительной степени бесполезно для текстовой области сайта, потому что нажатие Escape теряет фокус на текстовой области.
Я ищу решение этой проблемы, хотя. Я мог бы пойти так далеко, как написать какой-нибудь хук драйвера / клавиатуры в C, если это необходимо, хаха.
Раздражения, специфичные для Vim: он делает невозможным набирать орграфы с помощью комбинации Ctrl-K и, как правило, раздражает, прежде чем привыкнуть к нему. Это работает хорошо для меня, хотя, потому что я бы сделал все, чтобы избежать клавиш Esc и Ctrl, насколько это возможно.
Это могло появиться на ранее упомянутой странице vim wikia после решения Рича выше.
; Author: fwompner gmail com
#InstallKeybdHook
SetCapsLockState, alwaysoff
Capslock::
Send {LControl Down}
KeyWait, CapsLock
Send {LControl Up}
if ( A_PriorKey = "CapsLock" )
{
Send {Esc}
}
return
Это не моя работа, но я начал использовать его, и он работает точно так, как описано, никаких реальных предупреждений, и, поскольку он не пытается отобразить какие-либо исключения (потому что они не нужны), он ведет себя довольно хорошо в Chrome (я действительно хотел именно для Vimium).
Для этого я использую следующий скрипт AutoHotkey , адаптированный из сценария, который я нашел в Vim Tips Wiki. Реализация немного хакерская, но она «работает для меня». (И в отличие от других ответов на этой странице по состоянию на 2016-09-19 гг., Он полностью решает проблему без каких-либо предостережений, о которых мне известно.)
Оригинальный кодер отметил:
Сценарий также пытается обнаружить и избежать "ложных срабатываний", когда вы нажимаете Control и другую клавишу и отпускаете оба слишком быстро, то есть до истечения времени ожидания.
Обязательно настройте значение 250 мс в зависимости от того, насколько хороша или плоха ваша клавиатура, и от вашего собственного времени реакции. Это, вероятно, что-то, чтобы экспериментально настроить по своему вкусу.
g_LastCtrlKeyDownTime := 0
g_AbortSendEsc := false
g_ControlRepeatDetected := false
*CapsLock::
if (g_ControlRepeatDetected)
{
return
}
send,{Ctrl down}
g_LastCtrlKeyDownTime := A_TickCount
g_AbortSendEsc := false
g_ControlRepeatDetected := true
return
*CapsLock Up::
send,{Ctrl up}
g_ControlRepeatDetected := false
if (g_AbortSendEsc)
{
return
}
current_time := A_TickCount
time_elapsed := current_time - g_LastCtrlKeyDownTime
if (time_elapsed <= 250)
{
SendInput {Esc}
}
return
~*^a::
~*^b::
~*^c::
~*^d::
~*^e::
~*^f::
~*^g::
~*^h::
~*^i::
~*^j::
~*^k::
~*^l::
~*^m::
~*^n::
~*^o::
~*^p::
~*^q::
~*^r::
~*^s::
~*^t::
~*^u::
~*^v::
~*^w::
~*^x::
~*^y::
~*^z::
~*^1::
~*^2::
~*^3::
~*^4::
~*^5::
~*^6::
~*^7::
~*^8::
~*^9::
~*^0::
~*^Space::
~*^Backspace::
~*^Delete::
~*^Insert::
~*^Home::
~*^End::
~*^PgUp::
~*^PgDn::
~*^Tab::
~*^Return::
~*^,::
~*^.::
~*^/::
~*^;::
~*^'::
~*^[::
~*^]::
~*^\::
~*^-::
~*^=::
~*^`::
~*^F1::
~*^F2::
~*^F3::
~*^F4::
~*^F5::
~*^F6::
~*^F7::
~*^F8::
~*^F9::
~*^F10::
~*^F11::
~*^F12::
g_AbortSendEsc := true
return
На самом деле я думаю, что я построил идеальное решение здесь:
Как пользователь Vim, это необходимо для меня, и я уже давно успешно использую его в Windows. Я просто создаю запись в HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
с помощью regedit, чтобы указать на исполняемый файл, и он просто работает.
Чтобы скомпилировать и установить зависимости, пожалуйста, проверьте репозиторий README и основной веб-сайт для перехвата.
Я также создал версию для Linux того же здесь:
Я искал что-то похожее на это, но, к сожалению, сценарии AHK из ответов здесь не сработали для меня.
Однако я нашел решение, которое решило это для меня на вики- сайте vim.
- Сначала загрузите следующее приложение под названием dual-key-remap.
- Извлеките zip-файл в папку по вашему выбору (я храню такие утилиты в
C:\Users\%username%\util\
) - Откройте следующий каталог:
C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
и перетащите туда файл dual-key-remap.exe, удерживая нажатой клавишу ALT, чтобы создать ярлык. (Или щелкните правой кнопкой мыши и выберите «Создать ярлык», и переместите ярлык в каталог запуска). - Войти и выйти. Через несколько секунд после входа в систему ключи будут восстановлены.
Вот запись в реестре, которая отображает блокировку прописных букв для выхода из Windows 7.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,46,00,01,00,3a,00,00,00,00,00
Сохраните вышеперечисленное в файл с расширением .reg (например, mapCapLocks.reg) и импортируйте / выполните его на своем компьютере.
Программа remapkey.exe, включенная в Windows Server 2003 Resource Kit Tools, упомянутые в этой статье, прекрасно работает в Windows 7.