C# Sendkeys不发送或发送多个字符串

C# Sendkeys不发送或发送多个字符串,c#,winforms,on-screen-keyboard,C#,Winforms,On Screen Keyboard,我在Windows中制作了一个键盘。有许多按钮的表单和它们的内容是字母表中不同的字符,就像一个真正的键盘一样 现在的问题是,当我在Windows7中使用键盘时,一切都很完美。但是,当我在Windows XP的触摸屏上使用键盘时,键盘会多次写入我刚才按下的按钮的内容,或者不会在文本框中写入任何内容 下面是一些示例代码: Button temp = sender as Button; SendKeys.SendWait(temp.Text); 我试过SendKeys。Flush和 <appS

我在Windows中制作了一个键盘。有许多按钮的表单和它们的内容是字母表中不同的字符,就像一个真正的键盘一样

现在的问题是,当我在Windows7中使用键盘时,一切都很完美。但是,当我在Windows XP的触摸屏上使用键盘时,键盘会多次写入我刚才按下的按钮的内容,或者不会在文本框中写入任何内容

下面是一些示例代码:

Button temp = sender as Button;
SendKeys.SendWait(temp.Text);
我试过SendKeys。Flush和

<appSettings>

<add key="SendKeys" value="SendInput"/>
</appSettings>
。但这并没有解决问题

我做错了什么


编辑:现在我发现第一个字母总是完美的。在那之后,一切都变得糟糕。除了SendKeys.Flush之外,还有什么我可以试试的吗?

在第一个字母之后,你就失去了注意力。。。在调用SendWait之前将焦点重置为目标。

在第一个字母之后,您将失去焦点。。。在调用SendWait之前将焦点重置为目标。

sendkeys函数实际上不是最好的函数。 使用winApi和更具体的PostMessage会更好

以下是一个例子:


您将更直接地处理消息队列,但这也意味着您将不得不处理额外的事情,例如布局/本地化

sendkeys函数并不是最好的函数。 使用winApi和更具体的PostMessage会更好

以下是一个例子:


您将更直接地处理消息队列,但这也意味着您将不得不处理额外的事情,例如布局/本地化

啊,浪费了很多精力。Windows已经提供了屏幕键盘应用程序。您只需要
Process.Start(“osk.exe”)
。它每次都能完美工作,不需要发送密钥。嗨,科迪·格雷,谢谢你的回复。windows xp的osk对于我的触摸屏来说太小了。您无法更改它的大小。您是否已验证触摸设备上的按钮单击事件是否如预期的那样发生?是的,我已验证。如果点击事件不正确,我按下的第一个字母就不正确。啊,浪费了很多精力。Windows已经提供了屏幕键盘应用程序。您只需要
Process.Start(“osk.exe”)
。它每次都能完美工作,不需要发送密钥。嗨,科迪·格雷,谢谢你的回复。windows xp的osk对于我的触摸屏来说太小了。您无法更改它的大小。您是否已验证触摸设备上的按钮单击事件是否如预期的那样发生?是的,我已验证。如果点击事件不正确,我按下的第一个字母就不正确。