文書番号: 834247 - 最終更新日: 2003年12月29日 - リビジョン: 1.0

SIP(Software Input Panel)で 日本語入力モード時に [CAPS] キーが ON (有効) 状態 である場合 [ENTER] キーが効かない

お知らせお使いのオペレーティング システムには適用しない情報が含まれている場合があります。
すべて展開する | すべて折りたたむ

概要

日本語入力モード時に SIP の [CAPS] キーが押下された状態になっている場合、[Enter] キーの入力が有効になりません。このため、入力された日本語文字の確定が行えなくなります。この現象は IME 98 のプロパティで、[入力] タブの [キー/ローマ字/色設定] リスト ボックスで [MS-IME] が設定されている場合に発生します。

現象

Windows CE .NET 4.1 環境において IME 98 のプロパティ設定で、[キー/ローマ字/色設定] に [MS-IME] が指定されている場合、日本語入力モード時に SIP 上の [CAPS] キーが押下された状態になっていると、[Enter] キーの入力が有効になりません。このため、入力された日本語文字の確定が行えなくなります。この現象は IME 98 プロパティの [キー/ローマ字/色設定] の設定状態に依存し、この設定に [MS-IME] 以外が指定されている場合には、本現象は発生しません。

原因

この現象は Platform Builder 4.1 (以下 : PB 4.1) に同梱されているサンプル SIP モジュール (msim.dll) に問題があるために発生します。具体的には SIP 上で [CAPS] キーをロック状態にすると、SIP モジュール内部では [Shift] キーがロック状態になります。従ってこの状態で [Enter] キーを押下した場合、キー スキャン コードとしては [Shift] + [Enter] が発生することになりますが、[MS-IME] のキー設定では [Shift] + [Enter] のキー コードに対応する機能 (処理動作) が割り当てられていないため、このキー コードは不要なキー入力とみなされます。このため本現象が発生します。一方 [MS-IME] 以外の [ATOK] [VJE] [WX] の各キー設定では、[Shift] + [Enter] キー コードに対応する機能が割り当てられているため、[Enter] キーの入力が有効となります。

解決方法

本現象は、以下のいずれかの方法により回避あるいは解決することができます。

<[MS-IME] のキー設定で、[Shift] + [Enter] キー入力に対応する機能を割り当てる方法>
本現象は [MS-IME] のキー設定で、下記手順により [Shift] + [Enter] キー入力に機能を割り当てることで回避することができます。
1. [Alt] キーを押しながら IME 98 バーをタップし、メニューを表示させ [プロパティ] を選択します。
2. [Microsoft IME 98 のプロパティ] ダイアログ ボックスが表示されたら、[入力] タブの [キー/ローマ字/色設定] リスト ボックスで [MS-IME] が設定されていることを確認します。
3. [入力] タブの [詳細設定] ボタンをタップし、[Microsoft IME 98 詳細プロパティ] ダイアログ ボックスを表示させます。
4. [キー設定] タブで、キー設定のリスト ボックスをスクロールさせ、[Alt] キーを押しながら [Enter] 部分をタップし、[キー追加] を選択します。
5. [キー設定] ダイアログ ボックス中央のリスト ボックスで、[Shift+Enter] を選択し、[OK] をタップします。
6. [Microsoft IME 98 詳細プロパティ] ダイアログ ボックスの [OK] をタップし、閉じます。
7. [Microsoft IME 98 のプロパティ] ダイアログ ボックスの [OK] をタップし、閉じます。

<[CAPS] キー ロック状態時での [Enter] キー入力を [Enter] キー コードのみとなるように、サンプル SIP モジュールを修正する方法>
本現象はサンプル SIP モジュール msim.dll ソース コードである、im.cpp ファイル内の IM_PressKey 関数を修正することにより解決することができます。

- msim.dll ソース コード修正内容 -
修正対象ファイル : %_winceroot%\PUBLIC\COMMON\SDK\SAMPLES\MSIM\im.cpp
修正対象関数名 : IM_PressKey 関数
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

修正前 (1271 行目)
            else if (g_fSwipeUpcase || ( Shifted() ^ CAPPed() )) 
            {
                nShiftState |= KeyShiftAnyShiftFlag;
                pnChar = &pKey->wcShift;
            }
            else 
            {
                pnChar = &pKey->wcUnshift;
            }

修正後
            else if (g_fSwipeUpcase || ( Shifted() ^ CAPPed() ))
            {
                if ( (pKey->bVk == VK_RETURN) && !Shifted() )
                    pnChar = &pKey->wcUnshift;
                else
                {
                    nShiftState |= KeyShiftAnyShiftFlag;
                    pnChar = &pKey->wcShift;
                }
            }
            else
            {
                if ( (pKey->bVk == VK_RETURN) && Shifted() )
                {
                    nShiftState |= KeyShiftAnyShiftFlag;
                    pnChar = &pKey->wcShift;
                }
                else
                    pnChar = &pKey->wcUnshift;
            }

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

状況

マイクロソフトでは、この問題をこの資料の冒頭に記載したマイクロソフト製品の問題として認識しています。

この資料は以下の製品について記述したものです。
  • Microsoft Windows CE .NET 4.1 Platform Builder
キーワード:?
kbbug KB834247
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"