--- lang: ja-jp breaks: true --- # C# WinForm のテキストボックスで `以前のバージョンの Micfosoft IME を使う` が OFF の場合に カタカナ入力になる 2021-08-28 > Microsoft IME を使用している場合、Windows 10 バージョン 20H2 および Windows 10 バージョン 2004 で問題が発生する可能性があります > https://support.microsoft.com/ja-jp/topic/microsoft-ime-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88-windows-10-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3-20h2-%E3%81%8A%E3%82%88%E3%81%B3-windows-10-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3-2004-%E3%81%A7%E5%95%8F%E9%A1%8C%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99-63696506-47d2-9997-0b72-41a68e328692 ## `以前のバージョンの Micfosoft IME を使う` を オン にする  ⇒  :::info この設定箇所へのいきかた。 ※何回やっても忘れるので、メモメモ。。 1. 設定  1. 時刻と言語  1. 言語  1. 日本語のオプション  1. Microsoft IMEのオプション  1. 全般  1. 互換性  ::: ## バグ修正パッチをインストールする > 問題 1: > この問題は KB4565503 で解決されています。 > > 問題 2: > この問題は KB4571744 で解決されています。 > > 問題 4: > この問題は KB4571744 で解決されています。 > > 問題 3、5、6、7: > これらの問題は KB4586853 で解決されました。 #### 2020 年 7 月 14 日 - KB4565503 (OS ビルド 19041.388) https://www.catalog.update.microsoft.com/Search.aspx?q=KB4565503 :::warning これらのパッチは、Windows 10 バージョン 21H1 にはインストールできない。 ::: ## Windows 10 バージョン 21H1 でいまだこの現象は解消されていない。  ## Windows 11 でも未だに不具合は解消されていない。 2022-03-23  ## Windows 8、8.1 を利用していた当時、`.NET Framework` 標準の ImeMode 設定が正常に動作しない問題があり、Win32APiを使用した回避処理により正常動作していた部分が、この現象の原因となっていたことが判明した。 2022-02-24 Windows10 以降は、`.NET Framework` / `.NET Core` 標準の ImeMode を使用する処理に変更することで対応する。 特殊な処理を入れず、標準のImeModeを使用した場合、以下のような動作となる。 1. `以前のバージョンの Micfosoft IME を使う` を オン 半角カタカナが正常に切り替わらない。 2. `以前のバージョンの Micfosoft IME を使う` を オフ 正常に動作する。 ## `以前のバージョンの Microsoft IME を使う` がどのような設定になっているかを取得しないと対応が困難 > [GP]日本語 IMEのバージョンを構成する/以前のバージョンの MICROSOFT IME を使う > https://registry.tomoroh.net/archives/11547 ```= コンピューター\HKEY_CURRENT_USER\Software\Microsoft\Input\TSF\Tsf3Override\{03b5835f-f03c-411b-9ce2-aa23e1171e36} ``` * NoTsf3Override2 * 0:オフ * 1:オン ```csharp= // Windows 10、11 の場合に、`以前のバージョンの Microsoft IME を使う` の設定により動作を変更する為、レジストリより値を取得する。 int? intNoTsf3Override2 = null; try { // レジストリ・キーのパスを指定してレジストリを開く using ( RegistryKey rKey = Registry.CurrentUser.OpenSubKey( @"Software\Microsoft\Input\TSF\Tsf3Override\{03b5835f-f03c-411b-9ce2-aa23e1171e36}" ) ) { // 一度も変更してなければ、`{03b5835f-f03c-411b-9ce2-aa23e1171e36}`が無い。 if (rKey != null) { string strKeyName = "NoTsf3Override2"; // レジストリの値を取得 strKeyName = rKey.GetValueNames() .Where(n => n?.ToUpper() == strKeyName.ToUpper()) .FirstOrDefault(); if (string.IsNullOrEmpty(strKeyName) == false) { intNoTsf3Override2 = rKey.GetValue(strKeyName) as int?; } // 開いたレジストリ・キーを閉じる rKey.Close(); } } } catch (NullReferenceException) { // レジストリ・キーまたは値が存在しない } ``` ###### tags: `Microsoft IME` `Windows 10` `C#` `WinForm`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up