Кажется, что самым прямым методом было бы использование MapVirtualKey или MapVirtualKeyEx, который переводит коды VK в коды сканирования.
Символ в код сканирования VK можно получить с помощью VkKeyScan (извлечение младшего байта, содержащегоКод ВК согласно документации MS).Таким образом, чтобы получить код сканирования 'X':
UINT VKCode=LOBYTE(VkKeyScan('X'));
UINT ScanCode=MapVirtualKey(VKCode,0);