You can specify different types of on-screen keyboards to be displayed.
Variant 1
To do this, change (from your program) the KeyboardName parameter in the registry at HKEY_CURRENT_USER\Software\ComfortSoftware\CKeyboard.
If the on-screen keyboard is visible then send Windows message PostMessage(FindWindow('TFirstForm', 'CKeyboardFirstForm'), WM_CSKEYBOARD, 1, 0) and the program will reload the keyboard.
Variant 2
Download this file: http://www.comfort-software.com/download/SetNameKB.exe
Command format: SetNameKB.exe "keyboard name"
Example: SetNameKB.exe Mini
Variant 3
char KeyboardName[80];
COPYDATASTRUCT MyCDS;
KeyboardName = "Standard";
// Fill the COPYDATA structure
MyCDS.dwData = 1; // function identifier
MyCDS.cbData = sizeof(KeyboardName); // size of data
MyCDS.lpData = &KeyboardName; // data structure
// Call function, passing data in &MyCDS
HWND hwDispatch = FindWindow( "TFirstForm", "CKeyboardFirstForm" );
if( hwDispatch != NULL )
SendMessage( hwDispatch,
WM_COPYDATA,
(WPARAM)(HWND) NULL,
(LPARAM) (LPVOID) &MyCDS );