【问题标题】:Send Keys special characters (){}+^ c#发送密钥特殊字符 (){}+^ c#
【发布时间】:2013-09-10 01:55:53
【问题描述】:

好的,我正在制作一个自动打字机,我希望用户能够输入键 {}()^+ 并输出应用程序。我知道您需要格式化 SendKeys.Send({^}); 之类的符号但我不能让它工作。到目前为止,这是我的 Timer Tick 的内容。另外,我有全局 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;
        }

    }

【问题讨论】:

  • "cant get this to work" 是对您问题的绝对糟糕描述。
  • 对不起,你的权利。它返回“组分隔符不平衡。”
  • 在哪一行,使用哪个输入?
  • SendKeys 很烂。在这里查看我的答案:stackoverflow.com/a/41886193/1599699

标签: c# character sendkeys


【解决方案1】:

好的,快速分析,如果我遗漏了什么,请见谅。

  • 您正在使用 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());
    }

有更优化的实现方式,但出于目的清晰和与原始代码的相似性,我会选择这种方式。

【讨论】:

  • 你能给我一些建议或方法吗?
  • 它工作,感谢您的帮助,我从来没有想过使用布尔
  • 不客气。这个想法是使用布尔值作为一个标志来指示是否在 specialChars 集合中找到匹配项。
  • @user2692560,您是 SO 新手。请务必阅读此建议...stackoverflow.com/help/someone-answers
猜你喜欢
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2019-02-13
相关资源
最近更新 更多