我试图使用SendKeys.Send()
发送"{“和"}”
我已经试过用string.Replace{"{", "{{}"}
了
txt = txt.Replace("{", "{{}");
txt = txt.Replace("}", "{}}");
SendKeys.Send(txt);
我希望它发送"{“和"}”,但是程序抛出了一个错误
System.FormatException
发布于 2019-01-24 14:25:52
它在官方文件上有很清楚的记录。
在此,相关的bit:
加号(+)、插入符号(^)、百分比符号(%)、倾斜符号(~)和括号()对SendKeys具有特殊的含义。若要指定这些字符之一,请将其括在大括号({})中。例如,若要指定加号,请使用"{+}“。指定大括号字符,请使用"{{}“和”{}“。方括号()对SendKeys没有特殊意义,但您必须将它们用大括号括起来。
你的解决方案的问题是,你做了两个单独的替代。
接受输入字符串"{“。
txt = txt.Replace("{", "{{}"); // input becomes "{{}"
txt = txt.Replace("}", "{}}"); // input becomes "{{{}}"
SendKeys.Send(txt); // error!
我确信有一些解决方案比这更优雅,但您可以尝试这样的方法:
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());
编辑用一个开关扩展了转义,并对其他可逃避的字符进行了解释。
发布于 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))
另一个完全不同的选项是,在需要时发送字符一个,并在必要时转义大括号:
"some{}text".ToCharArray().ToList()
.ForEach(a=> SendKeys.Send(a == '}' || a == '{' ? "{"+a+"}": a.ToString()));
发布于 2019-01-24 14:21:31
我会使用一个不同的变量来保存整个字符串:
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());
https://stackoverflow.com/questions/54348461
复制相似问题