3

ToUnicodeEx: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646322(v=vs.85).aspx

ToUnicode: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646320(v=vs.85).aspx

この 2 つの唯一の違いは、ToUnicodeEx では入力ロケール識別子パラメーターの受け渡しが許可されているのに対し、ToUnicodeEx では許可されていないことです。私の質問は: ToUnicode 自体は ToUnicodeEx を呼び出しますか?

また、ToUnicodeEx msdn ページの下部の備考セクションに、次のように記載されています。ToUnicodeEx は仮想キー コードを変換するため、カーネル モードのキーボード バッファーの状態も変更します。この状態変化は、デッド キー、合字、alt+テンキー キー入力などに影響します。また、TranslateMessage (カーネル モードのキーボード バッファーの状態も変更します) と組み合わせて使用​​すると、望ましくない副作用が発生する可能性があります。

カーネルモードの kb バッファーで何をしているのかを正確に知っている人はいますか?

4

1 に答える 1

6

ToUnicodeToUnicodeExはどちらもラッパーであり、はい、唯一の違いは、 の場合は NULL であり、 の場合はユーザーNtUserToUnicodeExが指定する最終パラメーターです。ToUnicodeToUnicodeEx

デッド キーは複数の個別のキーの押下から文字を生成するために使用されるため、OS は以前にどのデッド キーが押されたかの履歴を保持する必要があります。ToUnicodeExそのメモはすべて、両方が同じ履歴を使用していることを警告していると思います。そのTranslateMessageため、2 つの関数への呼び出しを混在させると、信頼できない結果が生成される可能性があります。

于 2013-07-01T21:01:05.630 に答える