using System.Windows.Input; namespace JD.Core { /// /// Helper class to convert the key codes in C# to the matching key code for the UAF engine. /// Check InputAdapter.h in engine for the correct input codes. /// public class EngineKeyCodeConverter { static EngineKeyCodeConverter() { Instance = new EngineKeyCodeConverter(); } public static EngineKeyCodeConverter Instance { get; } protected EngineKeyCodeConverter() { } public uint ConvertKeyCode(Key key) { switch (key) { case Key.Space: return 32; case Key.Escape: return 257; case Key.Up: return 283; case Key.Down: return 284; case Key.Left: return 285; case Key.Right: return 286; case Key.LeftShift: return 287; case Key.RightShift: return 288; case Key.LeftCtrl: return 289; case Key.RightCtrl: return 290; case Key.LeftAlt: return 291; case Key.RightAlt: return 292; case Key.Tab: return 293; case Key.Enter: return 294; case Key.Back: return 295; case Key.Insert: return 296; case Key.Delete: return 297; case Key.PageUp: return 298; case Key.PageDown: return 299; case Key.Home: return 300; case Key.End: return 301; case Key.Divide: return 312; case Key.Multiply: return 313; case Key.Subtract: return 314; case Key.Add: return 315; case Key.Decimal: return 316; case Key.PrintScreen: return 319; default: { if (key >= Key.D0 && key <= Key.D9) return (uint)(48 + key - Key.D0); if (key >= Key.A && key <= Key.Z) return (uint)(65 + key - Key.A); if (key >= Key.F1 && key <= Key.F24) return (uint)(258 + key - Key.F1); if (key >= Key.NumPad0 && key <= Key.NumPad9) return (uint)(302 + key - Key.NumPad0); return (uint)key; } } } public uint ConvertModifiersKeyCode(ModifierKeys modifiers) { uint modifiersCode = 0; if ((modifiers & ModifierKeys.Control) == ModifierKeys.Control) modifiersCode += 1; if ((modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) modifiersCode += 2; if ((modifiers & ModifierKeys.Shift) == ModifierKeys.Shift) modifiersCode += 4; return modifiersCode; } } }