Există o mică problemă în codul pe care tu l-ai postat. Există diferite versiuni de limbă română cum ar fi legacy sau moldova, care au hex-uri diferite pentru diacritice în special Ș si Ț, un unicode diferit în funcție de layout-ul folosit. Postez mai jos codul complet, pentru orice tip de keyboard layout folosit
Show Spoiler
bool CMSApplication::MessageProcess()
{
MSG msg;
const BOOL result = GetMessage(&msg, NULL, 0, 0);
if (result <= 0)
return false;
if (msg.message == WM_KEYDOWN)
{
HKL hklCurrent = GetKeyboardLayout(0);
WORD langId = LOWORD((DWORD_PTR)hklCurrent);
if ((langId & 0x3FF) == 0x18)
{
BYTE abKeyState[256];
if (GetKeyboardState(abKeyState))
{
WCHAR awBuffer[4] = { 0, };
BYTE bScanCode = (BYTE)((msg.lParam >> 16) & 0xFF);
int iRet = ToUnicodeEx((UINT)msg.wParam, bScanCode, abKeyState, awBuffer, 4, 0, hklCurrent);
if (iRet == 1)
{
WCHAR wCorrected = 0;
switch (awBuffer[0])
{
case 0x0219: wCorrected = 0x015F; break;
case 0x021B: wCorrected = 0x0163; break;
case 0x0218: wCorrected = 0x015E; break;
case 0x021A: wCorrected = 0x0162; break;
}
if (wCorrected != 0)
{
char cAnsi = 0;
if (WideCharToMultiByte(1250, 0, &wCorrected, 1, &cAnsi, 1, NULL, NULL) > 0)
{
PostMessage(msg.hwnd, WM_CHAR, (WPARAM)(BYTE)cAnsi, msg.lParam);
DispatchMessage(&msg);
return true;
}
}
}
}
}
}
TranslateMessage(&msg);
DispatchMessage(&msg);
return true;
}