キーボード フィルターを使用する方法

今回の記事ではキーボード フィルターを有効にする方法についてまとめます。
# 概要
フィルター キー ではないのでご注意ください。
フィルター キーに関しては下記 Microsoft 公式情報をご確認いただくのがよいかと思います。

[Windows のフィルター キー機能 - マイクロソフト アクセシビリティ](https://www.microsoft.com/ja-jp/enable/products/windows-filterkeys.aspx)

キーボード フィルターに関する Microsoft 公式情報は下記となります。

[キーボード フィルター | Microsoft Docs](https://docs.microsoft.com/ja-jp/windows-hardware/customize/enterprise/keyboardfilter
)

ただ機械翻訳のためか、そのほかの理由か不明ですがわかりづらいので本記事で最低限必要な手順をまとめます。

# 注意点

使用できるエディションが Enterprise および Education に限られる点に注意が必要です。
エディションが Pro や Home の場合には まったく同一のことはでいないですが scancode map を編集して対処という感じですかね

なお私の環境では問題なくフィルターできているのですがキーボード フィルターは、リモート デスクトップ セッションではサポートされていません。
なお Hyper-V の拡張セッションでは有効にならないことを確認しています。
検証を実施する際には注意が必要ですね。

# 設定の流れ

ざっくり下記となります。

**(1) キーボード フィルターの有効化**
**(2) Microsoft キーボード フィルター サービスの開始設定**
**(3) フィルターの設定**

1 および 2 に関しては GUI と コマンドどちらでも設定が可能です。
(2)を飛ばしてレジストリ設定を実施している情報が散見されますが、サービス開始しませんとフィルタが有効になりませんのでご注意ください。

## (1) キーボード フィルターの有効化

まずはキーボード フィルターの有効化を実施します。
GUIまたはコマンドいずれかでキーボード フィルターを有効にします。


### GUIで設定する方法

1. [コントロール パネル] - [プログラム] - [ Windows の機能の有効化または無効化] の順に開きます。
2. [デバイスのロックダウン]もしくは[Device Lockdown]を展開し、[キーボード フィルター]にチェックを入れ、[OK] をクリックします。

![CL01_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/fdd4d194-bff0-c26b-a26a-a82776d02055.png)
3. [必要な変更が完了しました。]画面が表示されましたら、[今すぐ再起動]をクリックします。
![CL01_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/5f37f856-d113-aecd-7d2a-81f60eeb85da.png)


### コマンドで設定する方法

1. コマンド プロンプトを管理者として開きます。
1. ```dism /online /Enable-Feature /FeatureName:Client-KeyboardFilter```を実行します。
1. [今すぐコンピューターを再起動しますか? (Y/N)]のメッセージが表示されましたら [Y]キーを端末を再起動します。
![CL01_005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/c2ade74b-0dfa-8fce-6f2b-17f81dad3e1c.png)

## (2) Microsoft キーボード フィルター サービスの開始設定

端末が再起動されましたらサービスを開始する設定を行います。

### GUI で設定する方法

1. [スタート]ボタンを右リックし[コンピューターの管理] を開きます。
2. [サービスとアプリケーション] - [サービス]の順に展開します。
3. [Microsoft キーボード フィルター]をダブルクリックします。
![CL01_006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/4057be62-5eac-4afa-bf7e-237ec0f01fef.png)


4. [スタートアップの種類]欄を[手動]から[自動]へ変更します。
![CL01_007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/d138b0b4-a802-9fe2-0d0b-d6e5be2c7ccc.png)

5. [サービスの状態]欄の[開始]ボタンをクリックししサービスを開始します。
![CL01_008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/3baabf04-57fb-2c2d-c48a-2c7b2fcc954e.png)

6. [サービスの状態]が[実行中]になったことを確認してから、 [OK] をクリックします。

### コマンドで設定する方法

1. コマンド プロンプトを管理者として開きます。
1. ```sc config MsKeyboardfilter start=auto```を実行します。
1. [[SC] ChangeServiceConfig SUCCESS]のメッセージが表示されたことを確認し、```sc start MsKeyboardFilter```を実行します。
1. 下記画像の状態となりましたら完了です。
![CL01_011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/100a7b35-1d11-a864-893d-90fd1d624180.png)


## (3) フィルターの設定

ここまでは何ら難しいことはないと思いますがフィルターをかけるのが若干面倒です。
 Microsoft 的には[ブロックされたキーの組み合わせの追加 | Microsoft Docs](https://docs.microsoft.com/ja-jp/windows-hardware/customize/enterprise/keyboardfilter-add-blocked-key-combinations)のサンプルのあるスクリプトを使用して設定することをすすめていると思います。
がフィルターをかけたいキーが Microsoft で定義されている、いないの判断が一見しただけでは判断が難しいと思います。
その為わかりやすいレジストリ値を直接書き換えフィルターをかけてきます。

1. レジストリ エディターを起動します。
2. 下記パスを選択します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Embedded\KeyboardFilter
3. 右ペインを確認しフィルターをかけたいキーまたはキーの組み合わせが存在するか確認します。  
該当のキーまたはキーの組み合わせが存在する場合:値を [Blocked] に変更します。  
該当のキーまたはキーの組み合わせが存在しない場合:手順4 へ進みます。  
4. [CustomFilters]キーを作成します。
5. キー名またはキーの組み合わせの名前の文字列値を作成し値を [Blocked] にします。
下記ではMicrosoftでは定義をされていない Ctrl+V の組み合わせを無効としています。

![CL01_012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/8889bc9e-f38f-96a3-1c15-1a00e1db2206.png)

なお組み合わせを記載する場合には
[キーボード フィルターのキー名 | Microsoft Docs](https://docs.microsoft.com/ja-jp/windows-hardware/customize/enterprise/keyboardfilter-key-names)の順位従い

修飾子キー
システム キー
カーソルキーと数値演算キー
状態キー
OEM キー
関数キー

の順番で記載をするようにしてください。
そうしないと組み合わせが記述されていてもフィルターされません。

# 上記手順でできないこと

原因は不明ですが手順では状態キーの単独(例:NumLock をフィルター、CAPS LOCK をフィルター)ができません。
もし状態キーのフィルターの仕方をご存じの方がいらっしゃいましたら手順をお知らせいただけますとありがたいです。

# Microsoft 公式情報ほか

キーボード フィルター関連で有益と思われるページのリンクとなります。

[キーボード フィルター用 Windows PowerShell スクリプト サンプル | Microsoft Docs](https://docs.microsoft.com/ja-jp/windows-hardware/customize/enterprise/keyboardfilter-powershell-script-samples)

[画面キャプチャー機能 (スクリーンショット) を行う機能の一覧と、動作を抑止する方法について | Microsoft Japan Windows Technology Support Blog](https://jpwinsup.github.io/blog/2021/08/30/UserInterfaceAndApps/DisableScreenCapture/)

[Keyboard Filter で ［Windows キー + PrintScrn キー］ 及び ［Shift キー + PrintScrn キー］ をフィルタする方法 | Japan IoT Support Blog](https://jpiotblog.github.io/blog/2021/04/19/KF-block-printscrn-combination/)