10

我正在使用文本框通过 SendKeys 发送文本,但是当我在文本框中插入特殊字符时,我的应用程序崩溃了。例如,当我在文本框中输入“+”时,我收到此错误:SendKeys 字符串“+”无效。

我需要一个使用 SendKeys 发送特殊字符的解决方案,这是我的代码的一部分:

SendKeys.Send(dropDownEffectsLeft1.SelectedItem.ToString() + dropDownEffectsRight1.SelectedItem.ToString() + txt1.Text);

这都是关于名为的文本框txt1

我想我需要类似 a 的东西Regex来检查我是否txt包含任何特殊字符,并且我会这样做:

Regex specialChar = new Regex(@"^[a-zA-Z0-9_@.-]*$");

我真的很感谢你的帮助。

4

2 回答 2

20

MSDN SendKeys

加号 (+)、插入符号 (^)、百分号 (%)、波浪号 (~) 和括号 () 对于 SendKeys 具有特殊含义。要指定这些字符之一,请将其括在大括号 ({}) 中。例如,要指定加号,请使用“{+}”。要指定大括号字符,请使用“{{}”和“{}}”。方括号 ([ ]) 对 SendKeys 没有特殊意义,但您必须将它们括在大括号中。在其他应用程序中,括号确实具有特殊含义,在发生动态数据交换 (DDE) 时可能很重要。

代码

所以你只需要一个正则表达式来替换这些字符:

string txt = Regex.Replace(txt1.Text, "[+^%~()]", "{$0}");
SendKeys.Send(txt);

测试

我测试了代码,我有一个在线测试,你可以查看正则表达式[+^%~()]

  • 输入:加号 + 插入符号 ^ 百分比 % 波浪号 ~ 括号 ( )
  • 输出加 {+} 插入符号 {^} 百分比 {%} 波浪号 {~} 括号 {(} {)}
于 2013-08-18T13:03:28.047 回答
0

我发现还有一个额外的字符需要转义 - ~(波浪号)。我创建了一个包含所有低位和高位 ASCII 的文本文件,并使用此代码来处理文本:

              foreach (char c in pString) {
                 if (c.ToString() == "(")
                    SendKeys.SendWait("{(}");
                 else if (c.ToString() == ")")
                    SendKeys.SendWait("{)}");
                 else if (c.ToString() == "^")
                    SendKeys.SendWait("{^}");
                 else if (c.ToString() == "+")
                    SendKeys.SendWait("{+}");
                 else if (c.ToString() == "%")
                    SendKeys.SendWait("{%}");
                 else if (c.ToString() == "~")
                    SendKeys.SendWait("{~}");
                 else if (c.ToString() == "{")
                    SendKeys.SendWait("{{}");
                 else if (c.ToString() == "}")
                    SendKeys.SendWait("{}}");
                 else
                    SendKeys.SendWait(c.ToString());
              }

这是测试文本:

快速棕色狐狸跳过懒狗 123-456-7890 快速棕色狐狸跳过懒狗。敏捷的棕色狗:跳过;懒狗!¿ 狗跳了吗?¡ 价值约为 200+- - 那是一个破折号!当然,在 - 小写 - 波浪号下面有那个奇怪的符号。[这是一个脚注] 但我无法为 {花括号} 找借口。当然,我们知道(左括号和右括号都可以忽略)。我们需要发送电子邮件至 edgar@something.com 让他寄给我 1 美元,这大约是实际价值的 50%。显然有 3 个修饰符会失败: ^ the caret; + 加号;% 百分号;。我们还需要查看 & & 符号、*(星号)和 _ 下划线;然后是 = 等号和:冒号。如果我们在句子中间插入一个制表符会发生什么?那么我们当然可以有一个 | 竖线或 \ 反斜杠更不用说 / 正斜杠了。以上都是一行,后面跟着一个新行开始句子。好吧,我错过了什么我 # 英镑符号

在最后一段话之后,这开始了一个新的段落。最重要的是,上面有一个可信的蜡球——至少大部分是——“低 ASCII”——它涵盖了开始和结束引号,但不包括“卷曲”引号——它们是撇号。然后当然还有“高位 ASCII”: € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ' ' “” • – — ∼ ™ š › œ ž Ÿ ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ 更不用说数十甚至数十万个 Unicode 字符了!

于 2022-02-03T20:49:59.853 回答