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缓冲区?

最佳答案

ToUnicodeToUnicodeEx都是NtUserToUnicodeEx的包装器,是的,唯一的区别是最终参数,即ToUnicode为NULL和用户提供的ToUnicodeEx为final参数。

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

10-08 09:16