Windows 10でCapslockをコントロールにマップする


82

Windows 8では、レジストリスクリプトを使用して制御するためにcapslockキーを再マップしていました

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00

ウィンドウ10にアップグレードした後、これはもう機能しません。どうすればできますか?


これはCaps Lockを別のCtrlキーに再マップするだけであることに注意してください。私は彼らが交換したいので、私は上記のスクリプトを微調整するために、ここでの手順を使用:superuser.com/a/1202601/315584
jia103を

回答:


87

再起動することを覚えていましたか?7と8のように、私にとってはうまくいくようです。

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,02,00,00,00,1d,00,3a,00,00,00,00,00

9
私にとっての問題は、Windows 10のアップグレードでCaps Lockマッピングがリセットされることでした。しかし、別の再起動後も同じ方法で再度実行しました。
ジャックオコナー

38
私のような人がパズルの最後のピースを必要とする場合:上記を新しいテキストファイルに貼り付け、.reg拡張子を付けて保存し、ファイルをダブルクリックしてレジストリに変更を適用し、再起動します。
マイクニーブリング

4
Caps Lockその後、どのようにマッピングし直しますか?
Ehteshチョードリー

7
@EhteshChoudhuryを使用すると、レジストリキーの下の「スキャンコードマップ」エントリを削除し、再起動すると、デフォルトの動作が復元されます。
ボジョレー

76

PowerShellを使用してこれを行う必要がある場合:

$hexified = "00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00".Split(',') | % { "0x$_"};

$kbLayout = 'HKLM:\System\CurrentControlSet\Control\Keyboard Layout';

New-ItemProperty -Path $kbLayout -Name "Scancode Map" -PropertyType Binary -Value ([byte[]]$hexified);

管理者として実行し、再起動します。


16
Linuxのような「シェルへのコピー&ペースト」の答えを出すことに賛成票を投じてください!
mikezter

3
真剣に。* initrcスクリプトがありません。ありがとう。
-stewSquared

6
あなたは、今日のWindowsの使用を悲惨な経験をやや少なくしました。そのために、私はあなたに感謝します。
バイナリメーソン

18

SharpKeysを使用して、Windows 7、8、または10のキーを他のキーにマッピングできます。レジストリを自分で変更するよりもはるかに簡単でクリーンです。

お役に立てれば。


2
Caps Lockを押して言語を切り替えるためにこれを使用できますか?
thanos.a

13

以下を使用して、CAPS LOCKキーにCTRLを送信し、CTRLキーにALTを送信し、ALTキーにCAPS LOCKを送信します。CTRLは、神が意図した「A」の左にあり、ALTはSHIFTの下にあり、まったく役に立たないCAPS LOCKキーは、手首を折って打つ必要がある場所に安全に隠れています。

Windows Registry Editor Version 5.00

; The hex data is in five groups of four bytes:
;   00,00,00,00,\    header version (always 00000000)
;   00,00,00,00,\    header flags (always 00000000)
;   04,00,00,00,\    # of entries (3 in this case) plus a NULL terminator line.
;                    Entries are in 2-byte pairs: Key code to send & keyboard key to send it.
;                    Each entry is in LSB, MSB order.
;   1d,00,3a,00,\    Send LEFT CTRL (0x001d) code when user presses the CAPS LOCK key (0x003a) 
;   38,00,1d,00,\    Send LEFT ALT (0x0038) code when user presses the LEFT CTRL key (0x001d) 
;   3a,00,38,00,\    Send CAPS LOCK (0x3A) code when user presses the LEFT ALT key (0x0038) 
;   00,00,00,00      NULL terminator

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,\
                   00,00,00,00,\
                   04,00,00,00,\
                   1d,00,3a,00,\
                   38,00,1d,00,\
                   3a,00,38,00,\
                   00,00,00,00

4
コメントを本当にありがとう。私はいつもコードが何を意味するのかと思っていました。非常に役立ちます。
zaphodtx

3

これは、CtrlキーとCaps Lockキーを交換するスクリプトです。

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,1d,00,3a,00,3a,00,1d,00,00,00,00,00

2

lswitchを使用して、言語入力をCapsLockに再マッピングできます。

任意のキーを使用して、入力言語、使用法を切り替えますlswitch [keycode]。キーコードはオプションで、デフォルトはコンテキストメニューキーです。もう1つの良い候補は、キーコードが20のCapsLockキーです。

lswitch 20

自動ロードに追加します。


これは機能しますが、Caps Lock機能は失われます。Caps Lock機能をShift + Caps Lockの組み合わせに定義する方法に関するアイデアはありますか?
thanos.a

2

AutoHotKeyを使用してこれを行っていました。

スタートアップディレクトリに非常に基本的なahkスクリプトを実行するリンクがあります。

Capslock::Ctrl

重要なのは、Autohotkeyは管理者として実行されないため、起動ディレクトリの代わりにタスクスケジューラを使用してログイン時にスクリプトをより高い特権で実行しない限り、特権ウィンドウに影響を与えないということです。2番目の問題は、スリープを再開するときにスクリプトがハングすることがあるため、リロードが必要になる可能性があることです。

AutoHotKeyは、マクロの作成など、より複雑なタスクに適しています。


オートホットキーソリューションを試しましたが、お勧めしません。オートリピート速度が高く、遅延が低い場合、うまく機能しません。また、xkeymacsとうまく混ざり合わないため、Windowsのほぼすべての場所でemacsキーが機能します。
Reb.Cabin

私は、emacsのを使用して、ログイン時に自動的に.ahkファイルを開いて、はるかに最も簡単で、移植するには、この解決策が見つからない
Bjorksナンバーワンのファン

2

尽きることのないsysinternalsツールボックスは、コントロール付きのcapslockを切り替えるための小さなプログラム(ctrl2cap.exe)も提供します。


スーパーユーザーへようこそ。お読みくださいソフトウェアを推薦する方法その後、編集し、少なくとも最低限必要な情報(中項目含めるようにあなたの答えを大胆に)。この情報のない投稿は削除される場合があります。貢献してくれてありがとう。
私は

1

何らかの理由で、サードパーティのツールを実行したくない場合は、少しのCでこれを実行することができます。SusamPalのすばらしい回答のおかげで、スニペットを以下にまとめます。

これは実質的にキーロガーです。キーの押下をリッスンし、キャプチャし、マッピングを念頭に置いてキーボード入力を構築します。以下のコンソールアプリが動作するために実行する必要があります。

これを何らかの方法でコンパイルする必要があります。でmsys2.orgを使用しpacman -S mingw-w64-x86_64-gcc、でコンパイルしました/mingw64/bin/gcc nocaps.c -o nocaps.exe

#include <stdio.h>
#include <windows.h>

HHOOK hook;

#define KEYCODE_CAPSLOCK 20
#define KEYCODE_LCTRL 162

LRESULT CALLBACK keyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
    KBDLLHOOKSTRUCT *p = (KBDLLHOOKSTRUCT *) lParam;
    INPUT input = {.type = INPUT_KEYBOARD };

    printf("nCode=%d\t wParam=%d\t p->vkCode=%lu \t p->scanCode=%d\t\n", nCode, wParam, p->vkCode, p->scanCode);


    if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP) {
        input.ki.dwFlags = KEYEVENTF_KEYUP;
    }

    if (p->vkCode == KEYCODE_CAPSLOCK && (p->flags & LLKHF_INJECTED) == 0) {
        input.ki.wVk = KEYCODE_LCTRL;
        SendInput(1, &input, sizeof (INPUT));
        return 1;
    } else if (p->vkCode == KEYCODE_LCTRL && (p->flags & LLKHF_INJECTED) == 0) {
        input.ki.wVk = KEYCODE_CAPSLOCK;
        SendInput(1, &input, sizeof (INPUT));
        return 1;
    }

    return CallNextHookEx(hook, nCode, wParam, lParam);
}

int main(int argc, char **argv)
{
    MSG messages;

    hook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardHook, NULL, 0);
    if (hook == NULL) {
        printf("Error %d\n", GetLastError());
        return 1;
    }

    printf("Mapping CAPSLOCK=>LCTRL and LCTRL=>CAPSLOCK..\n");
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return 0;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.