In C++, just use std::string<_TCHAR>.
You could make your own keyboard easily. Look at the Quake source code for an example of a keyboard abstraction, and use two images (one with keys down and one with keys up) to lay out your keys. Keep a data structure with which screen area belongs to each key. You could make this completely skinnable if you wished.