其他分享
首页 > 其他分享> > c – ToUnicode是否会调用ToUnicodeEx? ToUnicodeEx在内核空间线程上有什么变化?

c – ToUnicode是否会调用ToUnicodeEx? ToUnicodeEx在内核空间线程上有什么变化?

作者:互联网

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 numpad键输入等.如果与TranslateMessage(也改变内核模式键盘缓冲区的状态)一起使用,它也可能导致不希望的副作用.

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

解决方法:

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

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

标签:keyboard-hook,c,unicode,windows
来源: https://codeday.me/bug/20190825/1720998.html