What’s wrong with TranslateMessage?  Two things:

  1. It probably shouldn’t be in the message loop.  Different windows do different things with character and keystroke messages.  Performance is not an issue here nowadays.  Having TranslateMessage in the message loop has resulted in awful things such as IsDialogMessage and TranslateAccelerator calls for every message that goes through the loop.
  2. More importantly though, TranslateMessage really should return TRUE if the keystroke message generates characters.  It should return FALSE in every other situation.  Unfortunately, TranslateMessage currently returns TRUE for WM_*KEYDOWN messages, even if no characters are generated by the keystroke (think F2 or Ctrl or up-arrow or Ctrl+Shift+X).  This means that application developers have no way of knowing if the key can be safely used as a shortcut key, or should be ignored because a WM_CHAR or similar is on its way to insert into the current focus.

    This in turn means that shortcut keys are typically processed (with TranslateAccelerator or a homegrown variety thereof) before TranslateMessage – and some characters are now inaccessible on some keyboard layouts.

    The typical workaround is to add a hack for Ctrl+Alt (AltGr).  Yuck.  And that doesn’t solve other supported combinations such as Ctrl+Shift.

So what’s the answer to these problems? TranslateMessageEx?

Categories: Developing Keyman

0 thoughts on “What’s wrong with TranslateMessage?”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Related Posts

Developing Keyman

Keyman Update for 19 June 2026

New Anglish keyboards for Ænglish (Old English), along with several updates for Krung, Mara, Tham Lanna, MADHURÂH (SIL), Hindi Flick, Hong Kong, Punjabi Flick, and Arabic W/O Dots keyboards! In addition, these alpha releases focus on technical documentation for integration, guides, and provide logs for project validation in Keyman Developer. We are also introduced to new contributors on the diverse keyboards for Keyman. Check out this blog's testimony as well!

Developing Keyman

Keyman Update for 5 June 2026

This release cycle highlights the growing impact of Keyman through a community testimony, introduces new keyboards for Hanifi Rohingya, Madurese, Punjabi, and Bayot, and includes updates for Keyman for Windows and Web. Welcome five new contributors to the project, and Keyboard App Builder 14.2 releases with usability improvements and bug fixes, the Keyman community continues to expand support for digitally disadvantaged languages. Which update or new keyboard are you most interested in exploring?

Developing Keyman

Keyman 19 roadmap update

The March 2026 Keyman 19 roadmap gets a candid mid-year update. An internal review found 363 open issues still assigned to v19. ARM Windows and Mac installer support are on track; CLDR mobile keyboards are postponed. The team is down to 9 — contributions and donations are welcome.