解决!请参阅[SOLUTION]C#SendKeys和Microsoft SQL Server Management Studio 2012(SSMS)
感谢您提供任何帮助。非常感谢!
简而言之:我试图使用SendKeys.Send(“^ {v}”)发送Ctrl + V到SSMS 2012,但它不起作用。它与记事本,UltraEdit,Word,Excel和Chrome一起工作良好,你可以将它命名。它甚至可以在Microsoft Visual Studio 2010中工作。
详细信息:我有一个在后台运行的应用程序。使用键盘快捷键,此应用程序显示带有选项的弹出窗口。根据我选择的选项,它会将与其相关的内容保存到剪贴板中。然后关闭那个弹出窗口,得到新的前景窗口(这应该是我在显示弹出窗口之前所做的),并尝试使用SendKeys粘贴剪贴板中的内容。
- 它与几乎每一个应用程序,我尝试它,除了SSMS
- 如果我手动按Ctrl + V粘贴它什么我在我的剪贴板
- 我添加了一些(文字通常)代码来显示我用GetForegroundWindow得到的窗口的标题,它确实给了我正确的SSMS窗口
- 所有这一切令人难过的是,有一段时间(很少),文本被正确粘贴在SSMS中,但它在第二秒后不起作用。
- 我永远不会让MessageBox说SetForegroundWindow失败。
- 如果我用3个SendKeys替换单个SendKey发送“A”,“B”和“C”,B和C被发送但不是A.是的,我尝试过使用睡眠思考,它需要时间来写第一个SendKey,但没有改变任何东西。
- 我尝试了SendKeys.SendWait,但没有得到不同的结果。
下面是从目前的代码,我关闭弹出
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");
}
}
希望有人可以提供帮助。 在此先感谢!
唉...我刚想出一个“解决方案”。由于第一个发送密钥似乎没有在SSMS上注册,我添加了一个无用的“SendKeys.Send(”{F14}“);”在我的Ctrl + V之前。我的文本现在正确地粘贴在SSMS中,而在记事本中F14键不会做任何好的事情。我开始使用{LEFT},但我改变了记事本和UltraEdit中的行,所以我选择了F14。 – Vinster