发送密钥特殊字符(){} + ^ c#

时间:2013-08-17 17:57:32

标签: c# character sendkeys

好的,所以我正在制作一个自动轮询,我希望用户能够输入密钥{}()^ +并将应用程序输出。我知道你需要格式化像SendKeys.Send({^});但我不能让这个工作。到目前为止我的计时器嘀嗒声是什么。另外,我有全局int blockCount,它告诉程序转到blockText字符串中的下一个字符 它返回“组别分隔符不均衡”。

  private void timer3_Tick(object sender, EventArgs e)
    {
        string blockText = richTextBox1.Text;

        int blockLength = richTextBox1.TextLength;
        btrand = RandomNumber(75, 200); //I have a method to make a rand num
        timer3.Interval = btrand;
        char[] specialChars = { '{', '}', '(', ')', '+','^' };
        foreach (char letter in blockText)
        {
            for (int i = 0; i < specialChars.Length; i++)
            {
                if (letter == specialChars[i])
                {
                    SendKeys.Send("{" + specialChars[i] + "}");
                    blockText.Remove(blockText.IndexOf(specialChars[i].ToString()));
                }
                else
                {
                    SendKeys.Send(letter.ToString());
                }
            }

        }
        blockCount++;
        if (blockCount >= blockLength)
        {
            blockCount = 0;
        }

    }

1 个答案:

答案 0 :(得分:0)

好的,快速分析,如果我错过了什么,请原谅我。

  • 您正在使用 blockText 作为集合执行 foreach ,并在找到特殊字符时对其进行操作。这可能很混乱;我想以另一种方式来实现这一点。
  • 您正在遍历所有特殊字符,并且对于您无法识别匹配的每次互动,您都会发送当前字母。这意味着您将重新发送 specialChars 数组中元素数减去一个的所有非特殊字符。我认为这不是你打算做的事。

我建议这样的实现:

    foreach (char letter in blockText)
    {
        bool _specialCharFound = false;

        for (int i = 0; i < specialChars.Length; i++)
        {
            if (letter == specialChars[i])
            {
                _specialCharFound = true;
                break;
            }
        }

        if (_specialCharFound)
            SendKeys.Send("{" + letter.ToString() + "}");
        else
            SendKeys.Send(letter.ToString());
    }

有更多优化的实现方法,但我会选择这个方法,目的明确,与原始代码相似。