Windows 7에서 이스케이프 및 제어에 Caps Lock 매핑

Windows 7에서 이스케이프 및 제어에 Caps Lock 매핑

다른 키와 함께 누르지 않은 경우 Caps Lock 키를 Escape로 매핑하고 Ctrl이 있는 경우 Control을 매핑할 수 있기를 원합니다. Windows 7에서는 어떻게 할 수 있나요?

답변1

이전에 언급한 항목에 이 내용이 나타날 수 있습니다.vim 위키아 페이지위의 Rich 솔루션 이후.

; 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을 원했습니다).

답변2

다음을 사용하여 Escape로 다시 매핑할 수 있습니다.샤프키

그러나 키보드 드라이버를 작성하는 것 외에는 조건부 다시 매핑을 수행하는 현실적인 방법을 모릅니다.

답변3

이것은 정확히 당신이 원하는 것은 아니지만 몇 가지 결함을 안고 살 수 있다면 매우 가깝습니다. 여기에오토핫키스크립트:

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

Caps Lock을 Ctrl로 다시 매핑하고 키를 놓으면 Escape를 보냅니다. Caps Lock 키를 놓을 때마다 Esc 키를 누르는 데 익숙해지는 데 시간이 좀 걸렸습니다. 그러나 Esc 키를 누르면 텍스트 영역에 대한 초점이 잃기 때문에 웹사이트 텍스트 영역에서는 거의 쓸모가 없습니다.

그래도 이에 대한 해결책을 찾고 있습니다. 필요하다면 C로 일종의 드라이버/키보드 후크를 작성할 수도 있습니다. 하하.

Vim 관련 성가심: Ctrl-K 조합을 사용하여 이중 문자를 입력하는 것이 불가능하며 일반적으로 익숙해지기 전에는 매우 성가신 일입니다. Esc와 Ctrl 키를 최대한 피하기 위해 무엇이든 할 것이기 때문에 그것은 나에게 잘 작동합니다.

답변4

나는 다음을 사용합니다오토핫키이에 대한 스크립트는 다음에서 수정되었습니다.Vim Tips Wiki에서 찾은 것 중 하나입니다.. 구현은 약간 해킹적이지만 "나에게 적합합니다." (그리고 2016-09-19 현재 이 페이지의 다른 답변과 달리 제가 알고 있는 어떤 경고도 없이 문제를 완전히 해결합니다.)

원래 코더는 다음과 같이 언급했습니다.

또한 스크립트는 Control과 다른 키를 눌렀다가 너무 빨리(즉, 시간 초과 기간 전에) 놓는 "오탐지"를 감지하고 방지하려고 시도합니다.

키보드의 성능과 반응 시간에 따라 250ms 값을 조정하세요. 이것은 아마도 자신의 취향에 맞게 실험적으로 조정할 수 있는 것일 것입니다.

CapsLockCtrlEscape.ahk 요지:

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

관련 정보