18

Я хочу иметь возможность сопоставить клавишу Caps Lock с Escape, если она не нажата с любой другой клавишей, и Control, если она есть. Как я могу сделать это на Windows 7?

8 ответов8

7

Вы можете переназначить его на Escape с помощью SharpKeys

Однако я не знаю реалистичного способа выполнения условного переназначения, кроме написания драйвера клавиатуры.

5

Это не совсем то, что вы хотите, но очень близко, если вы можете жить с некоторыми недостатками. Вот скрипт AutoHotKey :

$CapsLock::LControl
$CapsLock Up::Send {Escape}
return

Он переназначает Caps Lock на Ctrl и отправляет Escape, когда вы отпускаете клавишу. Мне потребовалось некоторое время, чтобы привыкнуть к нажатию клавиши Escape каждый раз, когда я отпускаю клавишу Caps Lock. Тем не менее, это в значительной степени бесполезно для текстовой области сайта, потому что нажатие Escape теряет фокус на текстовой области.

Я ищу решение этой проблемы, хотя. Я мог бы пойти так далеко, как написать какой-нибудь хук драйвера / клавиатуры в C, если это необходимо, хаха.

Раздражения, специфичные для Vim: он делает невозможным набирать орграфы с помощью комбинации Ctrl-K и, как правило, раздражает, прежде чем привыкнуть к нему. Это работает хорошо для меня, хотя, потому что я бы сделал все, чтобы избежать клавиш Esc и Ctrl, насколько это возможно.

4

Это могло появиться на ранее упомянутой странице 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).

4

Для этого я использую следующий скрипт AutoHotkey , адаптированный из сценария, который я нашел в Vim Tips Wiki. Реализация немного хакерская, но она «работает для меня». (И в отличие от других ответов на этой странице по состоянию на 2016-09-19 гг., Он полностью решает проблему без каких-либо предостережений, о которых мне известно.)

Оригинальный кодер отметил:

Сценарий также пытается обнаружить и избежать "ложных срабатываний", когда вы нажимаете Control и другую клавишу и отпускаете оба слишком быстро, то есть до истечения времени ожидания.

Обязательно настройте значение 250 мс в зависимости от того, насколько хороша или плоха ваша клавиатура, и от вашего собственного времени реакции. Это, вероятно, что-то, чтобы экспериментально настроить по своему вкусу.

CapsLockCtrlEscape.ahk gist:

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
1

На самом деле я думаю, что я построил идеальное решение здесь:

Как пользователь Vim, это необходимо для меня, и я уже давно успешно использую его в Windows. Я просто создаю запись в HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run с помощью regedit, чтобы указать на исполняемый файл, и он просто работает.

Чтобы скомпилировать и установить зависимости, пожалуйста, проверьте репозиторий README и основной веб-сайт для перехвата.

Я также создал версию для Linux того же здесь:

0

Я искал что-то похожее на это, но, к сожалению, сценарии 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, чтобы создать ярлык. (Или щелкните правой кнопкой мыши и выберите «Создать ярлык», и переместите ярлык в каталог запуска).
  • Войти и выйти. Через несколько секунд после входа в систему ключи будут восстановлены.
0

Вот запись в реестре, которая отображает блокировку прописных букв для выхода из 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) и импортируйте / выполните его на своем компьютере.

-1

Программа remapkey.exe, включенная в Windows Server 2003 Resource Kit Tools, упомянутые в этой статье, прекрасно работает в Windows 7.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .