У меня странная проблема с SendKeys.Send
По сути, так и происходит. У меня есть браузер Internet Explorer на google.com, и я вызываю SendKeys.Send ("TestSample \ n"); иногда он отправляет несколько ключей дважды (например, TeestSample или TestSSSample) непредсказуемым образом. Это происходит примерно в 20% случаев.
Кроме того, когда я включаю пробел в строку SendKeys.Send ("Test Sample \ n"), он также непредсказуем, за исключением одной точки. Каждый раз, когда я делаю это, он входит в Test Sample, выполняет поиск в Google, но также прокручивает страницу результатов, как я нажимал пробел после ввода текста.
Кто-нибудь еще видел такое поведение? Кажется, это не работает с блокнотом в фокусе.
(Для иллюстрации приведен пример кода. Поместите его в форму с секундным таймером в форме с определениями DllImport в верхней части класса.) Это приложение дает сбой примерно в 20% случаев с Google.com в Интернете Explorer (8.0)
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
private void timer1_Tick(object sender, EventArgs e)
{
IntPtr foreground = GetForegroundWindow();
if (foreground != _currentForeground)
{
_currentForeground = foreground;
var titleBuilder = new StringBuilder(200);
GetWindowText(foreground, titleBuilder, 200);
string title = titleBuilder.ToString();
Debug.WriteLine("Title of " + title);
if (title == "Google - Windows Internet Explorer")
{
Debug.WriteLine("Sending keys");
SendKeys.Send("Test Sample\n");
}
if (title == "Untitled - Notepad")
SendKeys.Send("Test notpad sample\n");
Thread.Sleep(2000);
}
}
private IntPtr _currentForeground = IntPtr.Zero;