Уважаемые, подскажите пожалуйста что я делаю не так и как можно выйти из ситуации. Написал обработчик перехвата TranslateMessage из шадоу таблицы Код (Text): BOOL MyNtUserTranslateMessage( LPMSG lpMsg, HKL dwhkl) { BOOL result; CCHAR keys[260]; WCHAR chr[10]; ULONG res; result= g_OriginalNtUserTranslateMessage(lpMsg,dwhkl); memset(keys,0,sizeof(keys)*sizeof(CCHAR)); if (lpMsg->message == WM_KEYDOWN) { res = g_NtUserGetKeyboardState((LPBYTE)keys); res = g_NtUserToUnicodeEx( lpMsg->wParam, lpMsg->lParam, (LPBYTE)keys, (LPWSTR)&chr, 10,0,dwhkl); DbgPrint("chr = %S, res = %x",chr,res); DbgPrint("lpMsg->wParam = %c (0x%x), HKL = %x, lpMsg->lParam =%x, HWND = 0x%x \n", lpMsg->wParam, lpMsg->wParam, dwhkl, lpMsg->lParam, lpMsg->hwnd); } return result; } Хочу перевести полученные клавиши в соответствующую раскладку, которая является рабочей у потока, но что то видимо делаю не так... NtUserGetKeyboardState возвращает 0 как результат и соответственно ничего в буфер не пишет, и g_NtUserToUnicodeEx тоже работать не хочет, почему... не могу понять. Адреса перехватов проверял, все верно. Подскажите, что я делаю не так, и как добиться чтоб эти функции работали. Может быть существует какой то другой метод перевода, подскажите.