首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SendKeys中发送"{}“

如何在SendKeys中发送"{}“
EN

Stack Overflow用户
提问于 2019-01-24 14:04:40
回答 4查看 944关注 0票数 1

我试图使用SendKeys.Send()发送"{“和"}”

我已经试过用string.Replace{"{", "{{}"}

代码语言:javascript
运行
复制
txt = txt.Replace("{", "{{}");
txt = txt.Replace("}", "{}}");
SendKeys.Send(txt);

我希望它发送"{“和"}”,但是程序抛出了一个错误

System.FormatException

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-24 14:25:52

它在官方文件上有很清楚的记录。

在此,相关的bit:

加号(+)、插入符号(^)、百分比符号(%)、倾斜符号(~)和括号()对SendKeys具有特殊的含义。若要指定这些字符之一,请将其括在大括号({})中。例如,若要指定加号,请使用"{+}“。指定大括号字符,请使用"{{}“和”{}“。方括号()对SendKeys没有特殊意义,但您必须将它们用大括号括起来。

你的解决方案的问题是,你做了两个单独的替代。

接受输入字符串"{“。

代码语言:javascript
运行
复制
txt = txt.Replace("{", "{{}"); // input becomes "{{}"
txt = txt.Replace("}", "{}}"); // input becomes "{{{}}"
SendKeys.Send(txt);            // error!

我确信有一些解决方案比这更优雅,但您可以尝试这样的方法:

代码语言:javascript
运行
复制
var sb = new StringBuilder(txt.Length);
for(var i = 0; i < txt.Length; i++)
{
    var c = txt[i];
    switch (c)
    {
      case '+':
      case '^':
      case '%':
      case '~':
      case '(':
      case ')':
      case '[':
      case ']':
      case '{':
      case '}':
        sb.Append('{');
        sb.Append(c);
        sb.Append('}');
        break;
      default:
        sb.Append(c);
        break;
    }
}
SendKeys.Send(sb.ToString());

编辑用一个开关扩展了转义,并对其他可逃避的字符进行了解释。

票数 4
EN

Stack Overflow用户

发布于 2019-01-24 14:11:15

正如其他人指出的第二个Replace,替换第一个Replace添加的大括号。

要在字符串中转义花括号,可以使用Regex,如:SendKeys.Send(Regex.Replace(txt, @"[/{/}]", m => string.Format("{{{0}}}", m.Value)));

或者更好地转义所有在这个上下文中有特殊意义的字符。Regex.Replace(txt, @"[/{/}/+/%/~/(/)]", m => string.Format("{{{0}}}", m.Value))

另一个完全不同的选项是,在需要时发送字符一个,并在必要时转义大括号:

代码语言:javascript
运行
复制
"some{}text".ToCharArray().ToList()
   .ForEach(a=> SendKeys.Send(a == '}' || a == '{' ? "{"+a+"}": a.ToString()));
票数 1
EN

Stack Overflow用户

发布于 2019-01-24 14:21:31

我会使用一个不同的变量来保存整个字符串:

代码语言:javascript
运行
复制
var txt = "asdf{}Asdf";
            var newString = new StringBuilder();
            for (int i = 0; i < txt.Length; i++)
            {
                if (txt[i] == '{')
                    newString.Append("{{}");
                else if(txt[i] == '}')
                    newString.Append("{}}");
                else
                    newString.Append(txt[i]);
            } 
            SendKeys.Send(newString.ToString());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54348461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档