Been working on a function to simulate all keyboard events and return pressed keys in XNA.
public string GetPressedKey()
{
Keys[] keysDown = CurrentKeyboardStates[0].GetPressedKeys();
if (keysDown.Length == 1 && CurrentKeyboardStates[0] != LastKeyboardStates[0])
foreach (ggFramework.Symbols item in symbols)
if (item.index == (byte)keysDown[0])
return item.symbol.ToString();
return string.Empty;
}
Create an array of pressed keys and get a list of pressed keys.
If 1 key is down and the current key state is not equal to the previous state then do; for each symbol in a list of expected symbols we expect to see, check whether the key down’s byte value is equal to the expected value you want to detect. By this I mean, have an array containing objects, each with it’s own decimal value related ascii symbol.

I use an xml file containing my data and I load that into my array.
public class Symbols
{
public byte index;
public char symbol;
}
If the keyDown is recognized as one of the keys listed in the array, it will return the char.


