C# SendKeys扬抑符以安培和表示结果

C# SendKeys扬抑符以安培和表示结果,c#,.net,sendkeys,C#,.net,Sendkeys,C#sSendKeys.SendWait的行为“有趣”: 在文本框中输入一个符号&。为什么?如何解决这个问题 (注意:这种情况仅发生在de_AT culture) (目标应用程序不是问题所在,我已经用一个示例WinForms应用程序尝试过了)发生这种情况的原因是SendKeys在封面下使用Win32函数SendInput,该函数通过虚拟键代码而不是实际字符串进行操作。为了发送“^”,它有效地产生了shift-6,在奥地利键盘布局中产生了“&”。正如SendKeys上的一样,它间接警告:“如果您的

C#s
SendKeys.SendWait
的行为“有趣”:

在文本框中输入一个符号
&
。为什么?如何解决这个问题

(注意:这种情况仅发生在de_AT culture)


(目标应用程序不是问题所在,我已经用一个示例WinForms应用程序尝试过了)

发生这种情况的原因是
SendKeys
在封面下使用Win32函数
SendInput
,该函数通过虚拟键代码而不是实际字符串进行操作。为了发送“^”,它有效地产生了shift-6,在奥地利键盘布局中产生了“&”。正如
SendKeys
上的一样,它间接警告:“如果您的应用程序打算与各种键盘一起在国际上使用,那么使用Send可能会产生不可预测的结果,应该避免使用。”

区域性不是问题所在(更改区域性没有任何作用);要重现此问题,请将键盘布局设置为德语(奥地利);无需进一步的区域性设置。(Shift-6):美国键盘:
^
。。。德语键盘:
&
。。。因此,
{^}
被解释为Shift-6,并被“翻译”为德语(或者我应该说是奥地利语),但这种“翻译”并不适用于其他键。例如,
&
像一个符咒一样工作-尽管它肯定不能在同一个键上;-)是吗?因为如果我切换到奥地利布局并使用
SendKeys.SendWait(&“
),我肯定会得到“/”(shift-7)。是的,它可以工作。我已输入:
!“§${%}&/{(}{}}=?°²³{{{{}{[}}}{{}}{+}*{}{}{}}{}}}}{{}}}}{{}}}}}一个Z Z 0 1 8 9
像一个符咒。只有
^
不起作用。
SendKeys.SendWait("{^}");