The root cause is that I tried to write some platform-independent handlers that would return the correct values using only wxWidget API. Having looked into this in more detail, I don't think this is possible, as I would at least need some platform-specific logic to determine the keyboard layout. I have therefore decided that, if platform-specific logic is required, the Windows version might as well use the raw platform codes from the event, which should exactly match the codes used by OWL. I have retained the platform-independent logic for non-Windows platforms.