解決!請參閱[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