how do you use IME?

I'm a Microsoft SDE that used to maintain the (Windows and Office) Korean IME for a while...

Unfortunately the best IME API documentation is provided by non-Microsoft sites:

  • IME programming sample (very well commented code!) from Google's Chrome browser
    • ime_input.h
    • ime_input.cc
  • Win32 Multilingual IME Overview for IME Development (Archived)
  • Win32 Multilingual IME Application Programming Interface (Archived)
    (To Microsoft's credit, these last two used to be part of the Windows Driver Development Kit)

Here is the official Microsoft documentation: Input Method Manager (MSDN)

There is also a new, more advanced IME based on the Text Services Framework (TSF) that Microsoft would prefer you to use, but it's even more complicated and the old API is emulated pretty well. If you don't need any of the advanced features (like input via tablet/voice recognition/fancier IME/etc) then using the old API is sufficient.

The best documentation on the Text Services Framework is the TSF Aware Blog written by another Microsoft dev. Eric Brown may even personally answer your questions if you go this route.

Here is the official Microsoft documentation for TSF: Text Services Framework (MSDN)

One feature of TSF you may find useful is the ability to suppress rendering of the IME (needed for full screen games that need to render the IME themselves, for example). Simply tell TSF that your app will render the IME GUI, then implement an empty rendering method: UILess Mode Overview (MSDN)