2012-01-11 45 views
1

我在Windows.Forms中制作了一个带有许多按钮的键盘,并且它们的内容是字母表的不同字符,就像真正的键盘一样。Sendkeys发送no或多个字符串

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

下面是一些示例代码:

Button temp = sender as Button; 
SendKeys.SendWait(temp.Text); 

我试图SendKeys.Flush和

<appSettings> 

<add key="SendKeys" value="SendInput"/> 
</appSettings> 

在app.config

是这里msdn解决方案内。但它没有解决问题。

我在做什么错?

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

+0

啊,浪费很多精力。 Windows已经提供了一个屏幕键盘应用程序。所有你需要的是'Process.Start(“osk.exe”)'。它每次都能很好地工作,不需要'SendKeys'。 – 2012-01-11 08:07:45

+0

嗨科迪格雷,谢谢你的回复。来自Windows XP的osk对于我的触摸屏来说太小了。你不能改变它的大小。 – 2012-01-11 08:09:27

+0

您是否验证了按键点击事件在触摸设备上按预期发生? – 2012-01-11 19:33:51

回答

2

在第一个字母之后你会失去焦点......在调用SendWait之前将焦点重置到目标。

-1

sendkeys函数确实不是最好的函数。 使用winApi和更具体的PostMessage将证明更好。

下面是一个例子:PostMessage WM_KEYDOWN send multiply keys?

您将与消息队列更直接的工作,但它也意味着,你将不得不处理额外的东西,比如布局/定位。