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缓冲区?
最佳答案
ToUnicode
和ToUnicodeEx
都是NtUserToUnicodeEx
的包装器,是的,唯一的区别是最终参数,即ToUnicode
为NULL和用户提供的ToUnicodeEx
为final参数。
由于死键用于从多个单独的按键中生成字符,因此操作系统必须保留以前按下过哪些死键的历史记录。我认为所有这些警告都警告您,ToUnicodeEx
和TranslateMessage
都使用相同的历史记录-因此,混合调用这两个函数可能会产生不可靠的结果。