【问题标题】:Send special character with SendKeys使用 SendKeys 发送特殊字符
【发布时间】:2023-03-10 08:07:02
【问题描述】:

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

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

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

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

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

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

非常感谢您的帮助。

【问题讨论】:

    标签: c# regex keyboard character sendkeys


    【解决方案1】:

    来自MSDN SendKeys

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

    代码

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

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

    测试

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

    • 输入:Plus + Caret ^ Percent % Tilde ~ Parenthis ( )
    • 输出 加号 {+} 插入符号 {^} 百分比 {%} 波浪号 {~} 括号 {(} {)}

    【讨论】:

    • 是的,我也在尝试,使用 foreach 和 for 循环。没用。但看起来这个解决方案有效,但你为什么在 de { } 之间使用 $0 ?
    • $0 插入匹配的字符。
    • 很好的解决方案!没有必要使用 Foreach 和 For-loops :) 非常感谢。
    • 很好的答案~! {$0} 表示“用 { } 包围的字符串。”
    • 大括号本身也必须被转义,所以使用这个正则表达式:"[+^%~()\\{\\}]"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多