SendKeys.SendWait(“ {%}”)写入“ 5”而不是“%”

时间:2019-12-09 14:49:56

标签: c# winforms sendkeys

我正在编写一个使用SendKeys的应用,该应用会在文本可用时在光标处发送文本。每次应用程序必须写百分号时,它都会改写数字5。我发送10{%},输出为105。我不知道如何简单地使%符号出现。

来自MSDN

  

加号(+),脱字号(^),百分号(%),代字号(〜)和   括号()对SendKeys具有特殊含义。指定以下一项   这些字符,将其括在大括号({})中。例如,   指定加号,使用“ {+}”。要指定大括号字符,请使用   “ {{}”和“ {}}”。

这里是重现此问题的非常简单的示例(带有System.Windows.Forms参考的ConsoleApp)

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Threading.Thread.Sleep(1000);

            string text = "10{%}";

            // Output SHOULD be "10%"
            // Output IS "105"
            System.Windows.Forms.SendKeys.SendWait(text);

            Console.ReadLine();
        }
    }
}

输出为105,而不是10%

我无法弄清楚,如何使用SendKeys写%符号?

3 个答案:

答案 0 :(得分:3)

string text = "10+ù";

您的文化是fr-fr,使用的是AZERTY键盘。 %相对于ù位于换档位置,因此应该可以解决问题。

答案 1 :(得分:1)

在字符串文字的字符串值之前使用@运算符。

例如string text = @"10{%}";

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/verbatim

答案 2 :(得分:0)

那是奇怪的拉斐尔。我将您的代码复制粘贴到示例C#项目中,并得到10%作为输出。您是否通过提供的链接使用任何上述支持的平台-

  

适用于

     

.NET Core

     

3.0

     

.NET Framework

     

4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6 4.5.2 4.5.1 4.5 4.0 3.5 3.0 2.0 1.1