Thanks for the feedback on the beta I sent you.
It looks like the only solution to this is to use the new ToUnicode() flag that works on WIndows 10 build 1607 and onwards.
The issue is due to the way ToUnicode() affects the keyboard state when dead characters are processed and has been present in all previous versions of WIndows. Microsoft finally resolved the issue by adding the flag in Windows 10 build 1607.
mIRC uses ToUnicode() in the on KEYDOWN event to determine the character (as opposed to the key press) that will be generated, so that it is available in the event. Unfortunately, there is no way to resolve the ToUnicode() issue in this context. There are many posts on stackoverflow and in Microsoft blogs that suggest solutions but none of them actually work in all keyboard layout/language/device contexts. The only solution is the flag in Windows 10 build 1607. This will be enabled in the next beta.
The usage share of pre-Windows 10 versions of Windows is around 25%, so this would affect quite a few users. Because of this, I will also be reverting the change in the last beta that enabled on KEYDOWN/KEYUP/CHAR in all windows. It will be once again limited to custom @windows.