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

似乎两者之间的唯一区别是 ToUnicodeEx 允许传递输入语言环境标识符参数,而 ToUnicode 不允许。我的问题是:ToUnicode 本身是否调用 ToUnicodeEx?

此外,在 ToUnicodeEx msdn 页面底部的备注部分,我们看到:由于 ToUnicodeEx 翻译了虚拟键代码,它也改变了内核模式键盘缓冲区的状态。此状态更改会影响死键、连字、alt+数字键盘键输入等。如果与 TranslateMessage 结合使用(这也会改变内核模式键盘缓冲区的状态),它也可能会导致不希望的副作用。

有谁知道内核模式 kb 缓冲区到底在做什么?

4

1 回答 1

6

ToUnicode并且ToUnicodeEx都是包装器NtUserToUnicodeEx,是的,唯一的区别是最终参数是 NULLToUnicode和用户提供的ToUnicodeEx.

因为死键用于从多个单独的按键中生成字符,所以操作系统必须保留先前按下哪些死键的历史记录。我认为所有注释都在警告您,ToUnicodeEx并且TranslateMessage两者都使用相同的历史记录 - 因此混合调用这两个函数可能会产生不可靠的结果。

于 2013-07-01T21:01:05.630 回答