SendKeys.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System;
  2. using Terminal.Gui;
  3. namespace UICatalog {
  4. [ScenarioMetadata (Name: "SendKeys", Description: "SendKeys sample - Send key combinations.")]
  5. [ScenarioCategory ("Input")]
  6. class SendKeys : Scenario {
  7. public override void Setup ()
  8. {
  9. var label = new Label ("Insert the text to send:") {
  10. X = Pos.Center (),
  11. Y = Pos.Center () - 6
  12. };
  13. Win.Add (label);
  14. var txtInput = new TextField ("MockKeyPresses") {
  15. X = Pos.Center (),
  16. Y = Pos.Center () - 5,
  17. Width = 20
  18. };
  19. Win.Add (txtInput);
  20. var ckbShift = new CheckBox ("Shift") {
  21. X = Pos.Center (),
  22. Y = Pos.Center () - 4
  23. };
  24. Win.Add (ckbShift);
  25. var ckbAlt = new CheckBox ("Alt") {
  26. X = Pos.Center (),
  27. Y = Pos.Center () - 3
  28. };
  29. Win.Add (ckbAlt);
  30. var ckbControl = new CheckBox ("Control") {
  31. X = Pos.Center (),
  32. Y = Pos.Center () - 2
  33. };
  34. Win.Add (ckbControl);
  35. label = new Label ("Result keys:") {
  36. X = Pos.Center (),
  37. Y = Pos.Center () + 1
  38. };
  39. Win.Add (label);
  40. var txtResult = new TextField () {
  41. X = Pos.Center (),
  42. Y = Pos.Center () + 2,
  43. Width = 20,
  44. };
  45. Win.Add (txtResult);
  46. var rKeys = "";
  47. var rControlKeys = "";
  48. var IsShift = false;
  49. var IsAlt = false;
  50. var IsCtrl = false;
  51. txtResult.KeyPress += (e) => {
  52. rKeys += (char)e.KeyEvent.Key;
  53. if (!IsShift && e.KeyEvent.IsShift) {
  54. rControlKeys += " Shift ";
  55. IsShift = true;
  56. }
  57. if (!IsAlt && e.KeyEvent.IsAlt) {
  58. rControlKeys += " Alt ";
  59. IsAlt = true;
  60. }
  61. if (!IsCtrl && e.KeyEvent.IsCtrl) {
  62. rControlKeys += " Ctrl ";
  63. IsCtrl = true;
  64. }
  65. };
  66. var lblShippedKeys = new Label () {
  67. X = Pos.Center (),
  68. Y = Pos.Center () + 3,
  69. AutoSize = true
  70. };
  71. Win.Add (lblShippedKeys);
  72. var lblShippedControlKeys = new Label () {
  73. X = Pos.Center (),
  74. Y = Pos.Center () + 5,
  75. AutoSize = true
  76. };
  77. Win.Add (lblShippedControlKeys);
  78. var button = new Button ("Process keys") {
  79. X = Pos.Center (),
  80. Y = Pos.Center () + 7,
  81. IsDefault = true
  82. };
  83. Win.Add (button);
  84. void ProcessInput ()
  85. {
  86. rKeys = "";
  87. rControlKeys = "";
  88. txtResult.Text = "";
  89. IsShift = false;
  90. IsAlt = false;
  91. IsCtrl = false;
  92. txtResult.SetFocus ();
  93. foreach (var r in txtInput.Text.ToString ()) {
  94. var ck = char.IsLetter (r)
  95. ? (ConsoleKey)char.ToUpper (r) : (ConsoleKey)r;
  96. Application.Driver.SendKeys (r, ck, ckbShift.Checked,
  97. ckbAlt.Checked, ckbControl.Checked);
  98. }
  99. lblShippedKeys.Text = rKeys;
  100. lblShippedControlKeys.Text = rControlKeys;
  101. txtInput.SetFocus ();
  102. }
  103. button.Clicked += () => ProcessInput ();
  104. Win.KeyPress += (e) => {
  105. if (e.KeyEvent.Key == Key.Enter) {
  106. ProcessInput ();
  107. e.Handled = true;
  108. }
  109. };
  110. }
  111. }
  112. }