Вот как я наконец это сделал:
case WM_KEYDOWN:
GetKeyboardState(kbs);
if(kbs[VK_CONTROL] & 0x00000080)
{
kbs[VK_CONTROL] &= 0x0000007f;
::ToAscii(p_wParam, ::MapVirtualKey(p_wParam, MAPVK_VK_TO_VSC), kbs, ch, 0);
kbs[VK_CONTROL] |= 0x00000080;
}
else
::ToAscii(p_wParam, ::MapVirtualKey(p_wParam, MAPVK_VK_TO_VSC), kbs, ch, 0);
Затем я получаю состояния всех клавиш-модификаторов из kbs [].