Memetakan Caps Lock ke Escape dan Kontrol pada Windows 7

22

Saya ingin dapat memetakan Caps Lock Key untuk Escape jika tidak ditekan dengan tombol lain dan Kontrol jika itu. Bagaimana saya bisa melakukan itu pada Windows 7?

Zameer Manji
sumber
3
Pengalihan tugas
Saya membuatnya dengan memodifikasi register: commons.lbl.gov/display/[email protected]/... Anda perlu me-restart komputer Anda setelah melakukan ini. Win7.
staticor

Jawaban:

8

Anda dapat remap ke Escape dengan SharpKeys

Namun, saya tidak tahu cara realistis untuk melakukan pemetaan ulang bersyarat, selain menulis driver keyboard.

wizzard0
sumber
1
Saya sudah memiliki kunci Caps Lock saya yang dipetakan untuk Escape dengan SharpKeys.
Zameer Manji
6

Ini bukan apa yang Anda inginkan tetapi sangat dekat jika Anda dapat hidup dengan beberapa kekurangan. Berikut ini skrip AutoHotKey :

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

Memetakan kembali Caps Lock ke Ctrl dan mengirim Escape ketika Anda melepaskan kunci. Butuh beberapa saat untuk membiasakan diri dengan tombol Escape ditekan setiap kali saya melepaskan tombol Caps Lock. Namun itu cukup berguna pada textareas situs web karena menekan Escape kehilangan fokus pada textarea.

Saya mencari solusi untuk ini. Saya mungkin akan menulis driver / keyboard hook di C jika diperlukan, haha.

Gangguan spesifik vim: Ini membuat digraf tidak mungkin untuk diketik menggunakan kombinasi Ctrl-K dan umumnya menjengkelkan sebelum Anda terbiasa. Ini bekerja dengan baik bagi saya karena saya akan melakukan apa saja untuk menghindari tombol Esc dan Ctrl sebanyak mungkin.

Henry Heikkinen
sumber
Jika Anda hanya ingin memetakannya untuk melarikan diri, Anda dapat menyederhanakan ini ke: $CapsLock::Escapedan kemudian segera return.
Kazark
Saya mencoba untuk mengerti - jadi cacat dengan skrip adalah bahwa ketika Caps Lock ditekan dan dilepaskan, baik Ctrl dan Escape dikirim?
Rishi
5

Ini mungkin muncul di halaman wiki vim yang disebutkan sebelumnya setelah solusi Rich di atas.

; Author: fwompner gmail com
#InstallKeybdHook
SetCapsLockState, alwaysoff
Capslock::
Send {LControl Down}
KeyWait, CapsLock
Send {LControl Up}
if ( A_PriorKey = "CapsLock" )
{
    Send {Esc}
}
return

Ini bukan pekerjaan saya, tapi saya sudah mulai menggunakannya dan berfungsi persis seperti yang dijelaskan, tidak ada peringatan nyata, dan karena tidak mencoba memetakan pengecualian (karena tidak perlu) berperilaku cukup baik di Chrome (saya benar-benar menginginkannya untuk Vimium).

dragon788
sumber
Saya telah menggunakan skrip ini dan berfungsi untuk saya. Saya menggunakan ini untuk memutar Caps Lock ke Control / Escape untuk vim.
Brandon
1
Bekerja! Hanya untuk memperjelas, ini adalah skrip Autohotkey. Mulai di sini: autohotkey.com
Michael Fox
Untuk kepentingan pembaca yang mungkin belum mengklik dan melihat komentar pada intisari saya, sepertinya solusi ini hanya berfungsi jika Anda menekan Caps Locksebelum menekan Shift. Caps+Shift+Xbekerja tetapi Shift+Caps+Xtidak.
Rich
4

Saya menggunakan skrip AutoHotkey berikut untuk ini, diadaptasi dari yang saya temukan di Vim Tips Wiki . Implementasinya agak sedikit macet, tetapi "berhasil untuk saya." (Dan tidak seperti jawaban lain di halaman ini pada 2016-09-19, itu sepenuhnya menyelesaikan masalah tanpa peringatan yang saya ketahui.)

Pembuat kode asli mencatat:

Script juga mencoba mendeteksi dan menghindari "false positive" di mana Anda menekan Control dan tombol lain dan melepaskan keduanya terlalu cepat, yaitu sebelum periode waktu habis.

Pastikan untuk mengubah nilai 250ms tergantung pada seberapa baik atau buruk keyboard Anda, dan waktu reaksi Anda sendiri. Ini mungkin sesuatu yang bisa disesuaikan dengan keinginan Anda secara eksperimental.

Inti 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
Kaya
sumber
3

Berikut ini adalah entri registri yang memetakan caps lock untuk melarikan diri di 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

Simpan di atas ke file dengan ekstensi .reg (seperti mapCapLocks.reg) dan impor / jalankan di mesin Anda.

Stryker
sumber
Silakan kutip bagian-bagian penting dari jawaban dari tautan referensi, karena jawabannya dapat menjadi tidak valid jika halaman yang tertaut berubah. Saat ini 404 jadi jawaban ini tidak berguna.
DavidPostill
Poin luar biasa. Saya akan memperbarui jawabannya
Stryker
Ini juga akan memetakan tombol ScrollLock ke CapsLock. Jika bukan itu yang Anda inginkan, gunakan nilainya hex:00,00,00,00,00,00,00,00,02,00,00,00,01,00,3a,00,00,00,00,00. Editor yang berguna untuk peta ini adalah ScancodeMapping dari PlexData .
Appleshell
2

Sebenarnya saya pikir saya telah membangun solusi yang sempurna di sini:

Sebagai pengguna Vim, ini adalah suatu keharusan bagi saya, dan saya telah menggunakannya dengan sukses di Windows untuk waktu yang lama. Saya baru saja membuat entri HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Rundengan regedit untuk menunjuk ke executable dan hanya berfungsi.

Untuk mengkompilasi dan menginstal dependensi, periksa README repositori dan situs web utama untuk Interception.

Saya juga membuat versi Linux yang sama di sini:

pepper_chico
sumber
0

Program remapkey.exe yang disertakan dalam Alat Kit Sumber Daya Windows Server 2003 yang disebutkan dalam artikel ini berfungsi dengan baik di Windows 7.

justin
sumber
1
tolong hindari menggunakan tautan sebagai jawaban. alih-alih, coba jelaskan sebaik-baiknya konten tautan dan baru kemudian gunakan sebagai referensi. jika tautannya rusak, demikian juga seluruh jawaban Anda.
Lorenzo Von Matterhorn
0

Saya mencari sesuatu yang mirip dengan ini, tapi sayangnya skrip AHK dari jawaban di sini tidak bekerja dengan baik untuk saya.

Namun, saya menemukan solusi yang memecahkan masalah ini untuk saya di vim wiki .

  • Pertama, unduh aplikasi berikut ini yang disebut dual-key-remap .
  • Ekstrak zip di lokasi yang Anda pilih (Saya menyimpan utilitas seperti ini di C:\Users\%username%\util\)
  • Buka direktori berikut: C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\dan seret file dual-key-remap.exe di sana, sambil menahan ALT untuk membuat pintasan. (Atau klik kanan dan pilih 'buat pintasan', dan pindahkan pintasan ke direktori startup Anda).
  • Masuk dan keluar. Beberapa detik setelah Anda login, kunci-kunci tersebut akan muncul kembali.
penasaran-kucing
sumber