If you ever tried to make a On-screen keyboard, you probably created your native keyboard layout using an static array, right?
In Windows there are a good variation of keyboards in the %windir%\system32\kbd*.dll
These files cannot be handled out-of-the-box since there are undocumented from Microsoft part.
The article break down the essence to what needs to be handled.
It is also a nice little wrapper to get the data out, quick.
There is also a presentation
CStatic that displays a Apple / Android / Windows 8 look-a-like simple keyboard.
Read the whole article here: Multi language on-screen keyboard using Windows keyboard dlls