Last active
June 4, 2023 23:28
-
-
Save ktsugita/0d34312809cfcd073726b506d84083fb to your computer and use it in GitHub Desktop.
日本語キーボードが基本の状況で英語キーボードを接続した際に文字が正しく入力されるようにレジストリを変更する
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Requires -RunAsAdministrator | |
# 日本語キーボードが基本の状況で英語キーボードを接続した際に文字が正しく入力されるようにレジストリを変更します | |
# このスクリプトをコピペ等で保存する場合、文字コードをBOM付きUTF-8にして保存してください | |
# 管理者モードで実行してください | |
# | |
# - 参考 | |
# - [Windows10 21H2に英語配列のBluetoothキーボードを追加して日本語キーボードと共存させるための設定支援PowerShellスクリプト - Qiita](https://qiita.com/e4rfx/items/5eb658d3faff1a4c93ab) | |
# - [Windows10 21H2で英語配列のBluetoothキーボードを追加して日本語キーボードと共存させる設定 - Qiita](https://qiita.com/e4rfx/items/3f9a5b884209aced37b5) | |
# - [Windows 11 で 2 つのキーボード配列を使う](https://zenn.dev/microsoft/articles/two-keylayout-windows11) | |
Write-Host @" | |
日本語キーボードが基本の状況で英語キーボードを接続すると一部のキーが表示と異なる文字が入力されてしまいます。 | |
これを修正するためにキーボードに関連するレジストリを編集して問題を改修するスクリプトを実行します。 | |
基本: 日本語キーボード | |
追加: 英語キーボード | |
"@ | |
Read-Host "Enterキーを押すと必須レジストリの追加と削除を実施します" | |
Set-ItemProperty ` | |
-LiteralPath 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters' ` | |
-Name 'LayerDriver JPN' ` | |
-Value 'kbd106.dll' ` | |
-Force -Verbose | |
Set-ItemProperty ` | |
-LiteralPath 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters' ` | |
-Name 'OverrideKeyboardIdentifier' ` | |
-Value 'PCAT_101KEY' ` | |
-Force -Verbose | |
Remove-ItemProperty ` | |
-LiteralPath 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters' ` | |
-Name 'OverrideKeyboardType' ` | |
-Force -Verbose -ErrorAction SilentlyContinue | |
Remove-ItemProperty ` | |
-LiteralPath 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters' ` | |
-Name 'OverrideKeyboardSubtype' ` | |
-Force -Verbose -ErrorAction SilentlyContinue | |
Read-Host "Enterキーを押すと英語キーボード追加前を記憶します" | |
$base = "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID" | |
$first = Get-ChildItem -Path $base | |
$second = $first | ForEach-Object { Get-ChildItem -Path ("Registry::{0}" -f $_.Name) | Get-ItemProperty } | Where-Object DeviceDesc -like '*;HID Keyboard Device' | |
$second | Format-Table Service, DeviceDesc, ContainerID | |
Read-Host "Enterキーを押すと英語キーボード追加後を記憶します" | |
$base = "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID" | |
$third = Get-ChildItem -Path $base | |
$forth = $third | ForEach-Object { Get-ChildItem -Path ("Registry::{0}" -f $_.Name) | Get-ItemProperty } | Where-Object DeviceDesc -like '*;HID Keyboard Device' | |
$forth | Format-Table Service, DeviceDesc, ContainerID | |
Write-Host "英語キーボード追加前後の差分" | |
Compare-Object $second $forth | Tee-Object -Variable fifth | Format-List | |
$target = $fifth | Where-Object SideIndicator -eq '=>' | ForEach-Object { $_.InputObject } | Where-Object PSPath -like 'Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID\VID*' | |
$targetpath = $target.PSPath | ForEach-Object { "{0}\Device Parameters" -f ($_ -replace ('Microsoft.PowerShell.Core\\Registry::', 'Registry::')) } | |
Write-Host "追加された英語キーボードと推定されるレジストリキーに英語設定を設定します" | |
$targetpath | ForEach-Object { | |
Set-ItemProperty ` | |
-Path $_ ` | |
-Name 'KeyboardTypeOverride' ` | |
-Value 4 ` | |
-Force -Verbose -Confirm:$true | |
Set-ItemProperty ` | |
-Path $_ ` | |
-Name 'KeyboardSubTypeOverride' ` | |
-Value 0 ` | |
-Force -Verbose -Confirm:$true | |
} | |
Write-Host (@" | |
英語キーボードを接続しなおして、 | |
日本語キーボードでShift+2を押すと「{0}」が表示され、 | |
英語キーボードでShift+2を押すと「@」が表示されれば成功です。 | |
間違っていた場合に除去するため、レジストリキーを記録してください | |
"@ -f '"') | |
$targetpath | ForEach-Object { | |
Write-Host (@" | |
レジストリキー: {0} | |
KeyboardTypeOverride:4 | |
KeyboardSubTypeOverride:0 | |
"@ -f $_) | |
} | |
Read-Host "Enterキーを押すと終了します" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment