解决了!见解决方案
谢谢你能提供的任何帮助。非常感谢!
简单地说,:我试图用SendKeys.Send("^{v}")将Ctrl+V发送到2012年的SSMS,但它不起作用。它与记事本、UltraEdit、Word、Excel、Chrome都很好,你可以给它命名。它甚至可以在2010中工作。
In details:我有一个在后台运行的应用程序。使用键盘快捷方式,此应用程序将显示带有选项的弹出窗口。根据我选择的选项,它将与其相关的内容保存到剪贴板中。然后关闭弹出窗口,获取新的前台窗口(这应该是显示弹出窗口之前的窗口),并尝试用SendKeys粘贴剪贴板中的内容。
这是我关闭弹出窗口时的代码
this.Close();
IntPtr handle = GetForegroundWindow();
if (!handle.Equals(IntPtr.Zero))
{
if (SetForegroundWindow(handle))
{
//Optionnal just to show the window title
const int nChars = 256;
StringBuilder Buff = new StringBuilder(nChars);
if (GetWindowText(handle, Buff, nChars) > 0)
{
MessageBox.Show(Buff.ToString());
}
//[SOLUTION] Sending a useless key seems to solve my SSMS problem without affecting the other applications.
SendKeys.Send("{F14}");
//Sending Ctrl+V
SendKeys.Send("^{v}");
}
else
{
MessageBox.Show("SetForegroundWindow failed");
}
}希望有人能帮忙。提前感谢!
发布于 2013-06-06 02:09:26
请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
..。SendKeys类容易受到定时问题的影响,一些开发人员不得不解决这些问题。更新后的实现仍然容易受到定时问题的影响,但速度稍快,可能需要对解决方案进行更改。SendKeys类首先尝试使用前面的实现,如果失败,则使用新的实现。因此,SendKeys类在不同操作系统上的行为可能有所不同。此外,当SendKeys类使用新的实现时,SendWait方法不会等待消息被发送到另一个进程时被处理。..。
https://stackoverflow.com/questions/16950386
复制相似问题