テスト、ありがとうございます。
引用: 0[430140]: KeyboardLayout::LoadLayout, mKeyboardLayout=0xE0200411 0[430140]: IMM32: InitKeyboardLayout, aKeyboardLayout=e0200411, sCodePage=932, sIMEProperty=000d002b sIsIME=TRUE まず、確かに日本語キーボードレイアウトがインストールされていて、入力言語として日本語が選択されていることが確認できます。 引用: 0[430140]: IMM32: OnKeyDownEvent, hWnd=000807d0, wParam=00000039, lParam=000a0001 0[430140]: IMM32: OnKeyDownEvent, coming WM_CHAR: wParam=00000039, lParam=000a0001 0[430140]: KeyboardLayout::OnKeyDown, aVirtualKey=0x39, mLastVirtualKeyIndex=0x0000000A 0[430140]: KeyboardLayout::OnKeyDown, mLastShiftState=0x00 0[430140]: KeyboardLayout::OnKeyDown, mActiveDeadKey=0xFFFFFFFF, mChars="9" ( 0x0039 ), mShiftStates=0x534844B8 0[430140]: IMM32: OnKeyDownEvent, hWnd=000807d0, wParam=00000030, lParam=000b0001 0[430140]: IMM32: OnKeyDownEvent, coming WM_CHAR: wParam=00000030, lParam=000b0001 0[430140]: KeyboardLayout::OnKeyDown, aVirtualKey=0x30, mLastVirtualKeyIndex=0x00000001 0[430140]: KeyboardLayout::OnKeyDown, mLastShiftState=0x00 0[430140]: KeyboardLayout::OnKeyDown, mActiveDeadKey=0xFFFFFFFF, mChars="0" ( 0x0030 ), mShiftStates=0x534844B8 0[430140]: IMM32: OnKeyDownEvent, hWnd=000807d0, wParam=00000031, lParam=00020001 0[430140]: IMM32: OnKeyDownEvent, coming WM_CHAR: wParam=00000031, lParam=00020001 0[430140]: KeyboardLayout::OnKeyDown, aVirtualKey=0x31, mLastVirtualKeyIndex=0x00000002 0[430140]: KeyboardLayout::OnKeyDown, mLastShiftState=0x00 0[430140]: KeyboardLayout::OnKeyDown, mActiveDeadKey=0xFFFFFFFF, mChars="1" ( 0x0031 ), mShiftStates=0x534844B8 0[430140]: KeyboardLayout::OnKeyDown, aVirtualKey=0x12, mLastVirtualKeyIndex=0xFFFFFFFF で、この部分がIMEをオフにした状態で入力した時のキーイベントのログなのですが、このログだけ見る限り、"abc"とは入力されておらず、Firefoxから見る限りでは"901"と入力されていることになっています。キーダウンで押されたキーも9、0、1のキー(テンキーではない方)で、さらにそれによって入力された文字も"9"、"0"、"1"であるとWindowsからイベントを送信されています。 先日、書いたFirefoxの特殊な入力文字の取得方法とも関係がないようで、例えば最初のキーイベントの結果を見ても、 引用: IMM32: OnKeyDownEvent, coming WM_CHAR: wParam=00000039 引用: 0[430140]: KeyboardLayout::OnKeyDown, mActiveDeadKey=0xFFFFFFFF, mChars="9" ( 0x0039 )
上が通常のアプリケーションで利用するWM_CHARメッセージ、下がAPIを経由して取得した入力文字の取得結果ですが、どちらも0x39 ("9"の文字コードです)になっています。
その後のログでIMEがオンの状態の挙動を見ても、IME自体が"23456"という文字列の入力を受けています。
というわけで、FirefoxにWindowsから入力メッセージが届く前の段階で既におかしくなっていることが分かりますので、何らかの常駐しているユーティリティがキーボードの入力メッセージを途中で変更してしまっているか、そもそもハードウェアキーボードのドライバがおかしな入力イベントを生成しているのかもしれませんが、そこは判断できかねます。
Firefoxでのみ発生する、ということですがThunderbirdではどうでしょうか? どちらも同じGeckoエンジンを利用していますので、ひょっとすると同じ症状になるのかもしれません。もしそうであれば、フォーカスをもつウインドウのクラス名がFirefoxのウインドウのクラス名の場合にのみ何か変な処理がユーティリティかドライバの方で行われている可能性があります。Firefox2からFirefox3でウインドウのクラス名が変わるような話は無かったように記憶しているのですが、何しろ古い話ではっきりとは断言できません。
Windowsのデバイスマネージャーで、キーボードの下にどのようなキーボードが表示されていますか?
テスト、ありがとうございます。
[quote]0[430140]: KeyboardLayout::LoadLayout, mKeyboardLayout=0xE0200411 0[430140]: IMM32: InitKeyboardLayout, aKeyboardLayout=e0200411, sCodePage=932, sIMEProperty=000d002b sIsIME=TRUE[/quote]
まず、確かに日本語キーボードレイアウトがインストールされていて、入力言語として日本語が選択されていることが確認できます。
[quote]0[430140]: IMM32: OnKeyDownEvent, hWnd=000807d0, wParam=00000039, lParam=000a0001 0[430140]: IMM32: OnKeyDownEvent, coming WM_CHAR: wParam=00000039, lParam=000a0001 0[430140]: KeyboardLayout::OnKeyDown, aVirtualKey=0x39, mLastVirtualKeyIndex=0x0000000A 0[430140]: KeyboardLayout::OnKeyDown, mLastShiftState=0x00 0[430140]: KeyboardLayout::OnKeyDown, mActiveDeadKey=0xFFFFFFFF, mChars="9" ( 0x0039 ), mShiftStates=0x534844B8 0[430140]: IMM32: OnKeyDownEvent, hWnd=000807d0, wParam=00000030, lParam=000b0001 0[430140]: IMM32: OnKeyDownEvent, coming WM_CHAR: wParam=00000030, lParam=000b0001 0[430140]: KeyboardLayout::OnKeyDown, aVirtualKey=0x30, mLastVirtualKeyIndex=0x00000001 0[430140]: KeyboardLayout::OnKeyDown, mLastShiftState=0x00 0[430140]: KeyboardLayout::OnKeyDown, mActiveDeadKey=0xFFFFFFFF, mChars="0" ( 0x0030 ), mShiftStates=0x534844B8 0[430140]: IMM32: OnKeyDownEvent, hWnd=000807d0, wParam=00000031, lParam=00020001 0[430140]: IMM32: OnKeyDownEvent, coming WM_CHAR: wParam=00000031, lParam=00020001 0[430140]: KeyboardLayout::OnKeyDown, aVirtualKey=0x31, mLastVirtualKeyIndex=0x00000002 0[430140]: KeyboardLayout::OnKeyDown, mLastShiftState=0x00 0[430140]: KeyboardLayout::OnKeyDown, mActiveDeadKey=0xFFFFFFFF, mChars="1" ( 0x0031 ), mShiftStates=0x534844B8 0[430140]: KeyboardLayout::OnKeyDown, aVirtualKey=0x12, mLastVirtualKeyIndex=0xFFFFFFFF[/quote]
で、この部分がIMEをオフにした状態で入力した時のキーイベントのログなのですが、このログだけ見る限り、"abc"とは入力されておらず、Firefoxから見る限りでは"901"と入力されていることになっています。キーダウンで押されたキーも9、0、1のキー(テンキーではない方)で、さらにそれによって入力された文字も"9"、"0"、"1"であるとWindowsからイベントを送信されています。
先日、書いたFirefoxの特殊な入力文字の取得方法とも関係がないようで、例えば最初のキーイベントの結果を見ても、
[quote]IMM32: OnKeyDownEvent, coming WM_CHAR: wParam=00000039[/quote] [quote]0[430140]: KeyboardLayout::OnKeyDown, mActiveDeadKey=0xFFFFFFFF, mChars="9" ( 0x0039 )[/quote]
上が通常のアプリケーションで利用するWM_CHARメッセージ、下がAPIを経由して取得した入力文字の取得結果ですが、どちらも0x39 ("9"の文字コードです)になっています。
その後のログでIMEがオンの状態の挙動を見ても、IME自体が"23456"という文字列の入力を受けています。
というわけで、FirefoxにWindowsから入力メッセージが届く前の段階で既におかしくなっていることが分かりますので、何らかの常駐しているユーティリティがキーボードの入力メッセージを途中で変更してしまっているか、そもそもハードウェアキーボードのドライバがおかしな入力イベントを生成しているのかもしれませんが、そこは判断できかねます。
Firefoxでのみ発生する、ということですがThunderbirdではどうでしょうか? どちらも同じGeckoエンジンを利用していますので、ひょっとすると同じ症状になるのかもしれません。もしそうであれば、フォーカスをもつウインドウのクラス名がFirefoxのウインドウのクラス名の場合にのみ何か変な処理がユーティリティかドライバの方で行われている可能性があります。Firefox2からFirefox3でウインドウのクラス名が変わるような話は無かったように記憶しているのですが、何しろ古い話ではっきりとは断言できません。
Windowsのデバイスマネージャーで、キーボードの下にどのようなキーボードが表示されていますか?
|