diff --git a/ServerLib/CWebservice.cs b/ServerLib/CWebservice.cs index 7aaeb4e4..dbd27e1f 100644 --- a/ServerLib/CWebservice.cs +++ b/ServerLib/CWebservice.cs @@ -58,7 +58,7 @@ namespace ServerLib CServer.SendKeyEvent(key); } - public void SendKeyStringEvent(string keyString) + public void SendKeyStringEvent(string keyString, bool isShiftPressed = false, bool isAltPressed = false, bool isCtrlPressed = false) { if (!_CheckRight(EUserRights.UseKeyboard)) return; @@ -72,7 +72,7 @@ namespace ServerLib } } else - CServer.SendKeyStringEvent(keyString); + CServer.SendKeyStringEvent(keyString, isShiftPressed, isAltPressed, isCtrlPressed); } #region profile diff --git a/ServerLib/DataStructs.cs b/ServerLib/DataStructs.cs index 4ca7a0b7..5b87398b 100644 --- a/ServerLib/DataStructs.cs +++ b/ServerLib/DataStructs.cs @@ -26,7 +26,7 @@ using System.Text.RegularExpressions; namespace ServerLib { public delegate bool SendKeyEventDelegate(string key); - public delegate bool SendKeyStringEventDelegate(string keyString); + public delegate bool SendKeyStringEventDelegate(string keyString, bool isShiftPressed , bool isAltPressed , bool isCtrlPressed); #region profile public delegate SProfileData GetProfileDataDelegate(int profileId, bool isReadonly); diff --git a/ServerLib/ICWebservice.cs b/ServerLib/ICWebservice.cs index e4eeb0c3..acb24799 100644 --- a/ServerLib/ICWebservice.cs +++ b/ServerLib/ICWebservice.cs @@ -32,8 +32,8 @@ namespace ServerLib [OperationContract, WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, - UriTemplate = "/sendKeyStringEvent?keyString={keyString}")] - void SendKeyStringEvent(string keyString); + UriTemplate = "/sendKeyStringEvent?keyString={keyString}&shift={isShiftPressed}&alt={isAltPressed}&ctrl={isCtrlPressed}")] + void SendKeyStringEvent(string keyString, bool isShiftPressed = false, bool isAltPressed = false, bool isCtrlPressed = false); #region profile [OperationContract, WebInvoke(Method = "GET", diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index f2b22b45..d882881e 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -126,9 +126,11 @@ namespace Vocaluxe.Base.Server private static bool _SendKeyEvent(string key) { bool result = false; - if (!string.IsNullOrEmpty(key)) + var lowerKey = key.ToLower(); + + if (!string.IsNullOrEmpty(lowerKey)) { - switch (key.ToLower()) + switch (lowerKey) { case "up": Controller.AddKeyEvent(new SKeyEvent(ESender.Keyboard, false, false, false, false, Char.MinValue, Keys.Up)); @@ -158,25 +160,22 @@ namespace Vocaluxe.Base.Server Controller.AddKeyEvent(new SKeyEvent(ESender.Keyboard, false, false, false, false, Char.MinValue, Keys.Tab)); result = true; break; + case "backspace": + Controller.AddKeyEvent(new SKeyEvent(ESender.Keyboard, false, false, false, false, Char.MinValue, Keys.Back)); + result = true; + break; default: - foreach (char c in key) + if (lowerKey.StartsWith("f")) { - bool shift = true; - char keyChar; - if (char.ToUpper(c) != c) - { - keyChar = char.ToUpper(c); - shift = false; - } - else - keyChar = c; + var numberString = lowerKey.Substring(1); + int number; + Keys fKey; - if ((keyChar >= '0' && keyChar <= '9') || (keyChar >= 'A' && keyChar <= 'Z')) + if (Int32.TryParse(numberString, out number) && number >= 1 + && number <= 12 + && Enum.TryParse("F" + number, true, out fKey)) { - Keys keys = (Keys)keyChar; - if (shift) - keys |= Keys.Shift; - Controller.AddKeyEvent(new SKeyEvent(ESender.Keyboard, false, false, false, false, Char.MinValue, keys)); + Controller.AddKeyEvent(new SKeyEvent(ESender.Keyboard, false, false, false, false, Char.MinValue, fKey)); result = true; } } @@ -187,13 +186,17 @@ namespace Vocaluxe.Base.Server return result; } - private static bool _sendKeyStringEvent(string keyString) + private static bool _sendKeyStringEvent(string keyString, bool isShiftPressed , bool isAltPressed , bool isCtrlPressed ) { bool result = false; - + foreach (var key in keyString.ToCharArray()) { - Controller.AddKeyEvent(new SKeyEvent(ESender.Keyboard, false, Char.IsUpper(key), false, true, key, _ParseKeys(key))); + Controller.AddKeyEvent(new SKeyEvent(ESender.Keyboard, isAltPressed, + Char.IsUpper(key) || isShiftPressed, + isCtrlPressed, true, + isShiftPressed?Char.ToUpper(key) :key, + _ParseKeys(key))); result = true; } @@ -206,7 +209,15 @@ namespace Vocaluxe.Base.Server if (!Enum.TryParse(keyText.ToString(), true, out key)) { - key = Keys.None; + switch (keyText) + { + case ' ': + key = Keys.Space; + break; + default: + key = Keys.None; + break; + } } return key; diff --git a/Vocaluxe/Website/index.html b/Vocaluxe/Website/index.html index dbe2b538..fdb14c43 100644 --- a/Vocaluxe/Website/index.html +++ b/Vocaluxe/Website/index.html @@ -297,8 +297,25 @@
+