KeyUtil.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using System;
  2. using System.Windows.Input;
  3. namespace GeekDesk.Util
  4. {
  5. public class KeyUtil
  6. {
  7. public class KeyProp
  8. {
  9. public Key key;
  10. public bool printable;
  11. public char character;
  12. public bool shift;
  13. public bool ctrl;
  14. public bool alt;
  15. public int type; //sideband
  16. public string s; //sideband
  17. };
  18. public static void KeyToChar(Key key,
  19. ref KeyProp keyProp,
  20. bool downCap = false,
  21. bool downShift = false
  22. )
  23. {
  24. bool iscap;
  25. bool caplock = false;
  26. bool shift;
  27. keyProp.key = key;
  28. keyProp.alt = Keyboard.IsKeyDown(Key.LeftAlt) ||
  29. Keyboard.IsKeyDown(Key.RightAlt);
  30. keyProp.ctrl = Keyboard.IsKeyDown(Key.LeftCtrl) ||
  31. Keyboard.IsKeyDown(Key.RightCtrl);
  32. keyProp.shift = Keyboard.IsKeyDown(Key.LeftShift) ||
  33. Keyboard.IsKeyDown(Key.RightShift);
  34. if (keyProp.alt || keyProp.ctrl)
  35. {
  36. keyProp.printable = false;
  37. keyProp.type = 1;
  38. }
  39. else
  40. {
  41. keyProp.printable = true;
  42. keyProp.type = 0;
  43. }
  44. shift = downShift || keyProp.shift;
  45. //caplock = Console.CapsLock; //Keyboard.IsKeyToggled(Key.CapsLock);
  46. iscap = downCap || ((caplock && !shift) || (!caplock && shift));
  47. switch (key)
  48. {
  49. case Key.Enter: keyProp.character = '\n'; return;
  50. case Key.A: keyProp.character = (iscap ? 'A' : 'a'); return;
  51. case Key.B: keyProp.character = (iscap ? 'B' : 'b'); return;
  52. case Key.C: keyProp.character = (iscap ? 'C' : 'c'); return;
  53. case Key.D: keyProp.character = (iscap ? 'D' : 'd'); return;
  54. case Key.E: keyProp.character = (iscap ? 'E' : 'e'); return;
  55. case Key.F: keyProp.character = (iscap ? 'F' : 'f'); return;
  56. case Key.G: keyProp.character = (iscap ? 'G' : 'g'); return;
  57. case Key.H: keyProp.character = (iscap ? 'H' : 'h'); return;
  58. case Key.I: keyProp.character = (iscap ? 'I' : 'i'); return;
  59. case Key.J: keyProp.character = (iscap ? 'J' : 'j'); return;
  60. case Key.K: keyProp.character = (iscap ? 'K' : 'k'); return;
  61. case Key.L: keyProp.character = (iscap ? 'L' : 'l'); return;
  62. case Key.M: keyProp.character = (iscap ? 'M' : 'm'); return;
  63. case Key.N: keyProp.character = (iscap ? 'N' : 'n'); return;
  64. case Key.O: keyProp.character = (iscap ? 'O' : 'o'); return;
  65. case Key.P: keyProp.character = (iscap ? 'P' : 'p'); return;
  66. case Key.Q: keyProp.character = (iscap ? 'Q' : 'q'); return;
  67. case Key.R: keyProp.character = (iscap ? 'R' : 'r'); return;
  68. case Key.S: keyProp.character = (iscap ? 'S' : 's'); return;
  69. case Key.T: keyProp.character = (iscap ? 'T' : 't'); return;
  70. case Key.U: keyProp.character = (iscap ? 'U' : 'u'); return;
  71. case Key.V: keyProp.character = (iscap ? 'V' : 'v'); return;
  72. case Key.W: keyProp.character = (iscap ? 'W' : 'w'); return;
  73. case Key.X: keyProp.character = (iscap ? 'X' : 'x'); return;
  74. case Key.Y: keyProp.character = (iscap ? 'Y' : 'y'); return;
  75. case Key.Z: keyProp.character = (iscap ? 'Z' : 'z'); return;
  76. case Key.D0: keyProp.character = (shift ? ')' : '0'); return;
  77. case Key.D1: keyProp.character = (shift ? '!' : '1'); return;
  78. case Key.D2: keyProp.character = (shift ? '@' : '2'); return;
  79. case Key.D3: keyProp.character = (shift ? '#' : '3'); return;
  80. case Key.D4: keyProp.character = (shift ? '$' : '4'); return;
  81. case Key.D5: keyProp.character = (shift ? '%' : '5'); return;
  82. case Key.D6: keyProp.character = (shift ? '^' : '6'); return;
  83. case Key.D7: keyProp.character = (shift ? '&' : '7'); return;
  84. case Key.D8: keyProp.character = (shift ? '*' : '8'); return;
  85. case Key.D9: keyProp.character = (shift ? '(' : '9'); return;
  86. case Key.OemPlus: keyProp.character = (shift ? '+' : '='); return;
  87. case Key.OemMinus: keyProp.character = (shift ? '_' : '-'); return;
  88. case Key.OemQuestion: keyProp.character = (shift ? '?' : '/'); return;
  89. case Key.OemComma: keyProp.character = (shift ? '<' : ','); return;
  90. case Key.OemPeriod: keyProp.character = (shift ? '>' : '.'); return;
  91. case Key.OemOpenBrackets: keyProp.character = (shift ? '{' : '['); return;
  92. case Key.OemQuotes: keyProp.character = (shift ? '"' : '\''); return;
  93. case Key.Oem1: keyProp.character = (shift ? ':' : ';'); return;
  94. case Key.Oem3: keyProp.character = (shift ? '~' : '`'); return;
  95. case Key.Oem5: keyProp.character = (shift ? '|' : '\\'); return;
  96. case Key.Oem6: keyProp.character = (shift ? '}' : ']'); return;
  97. case Key.Tab: keyProp.character = '\t'; return;
  98. case Key.Space: keyProp.character = ' '; return;
  99. // Number Pad
  100. case Key.NumPad0: keyProp.character = '0'; return;
  101. case Key.NumPad1: keyProp.character = '1'; return;
  102. case Key.NumPad2: keyProp.character = '2'; return;
  103. case Key.NumPad3: keyProp.character = '3'; return;
  104. case Key.NumPad4: keyProp.character = '4'; return;
  105. case Key.NumPad5: keyProp.character = '5'; return;
  106. case Key.NumPad6: keyProp.character = '6'; return;
  107. case Key.NumPad7: keyProp.character = '7'; return;
  108. case Key.NumPad8: keyProp.character = '8'; return;
  109. case Key.NumPad9: keyProp.character = '9'; return;
  110. case Key.Subtract: keyProp.character = '-'; return;
  111. case Key.Add: keyProp.character = '+'; return;
  112. case Key.Decimal: keyProp.character = '.'; return;
  113. case Key.Divide: keyProp.character = '/'; return;
  114. case Key.Multiply: keyProp.character = '*'; return;
  115. default:
  116. keyProp.type = 1;
  117. keyProp.printable = false;
  118. keyProp.character = '\x00';
  119. return;
  120. } //switch
  121. }
  122. }
  123. }