У меня странная проблема с SendKeys.Send
В основном происходит вот что. У меня есть Internet Explorer в фокусе на google.com, и я вызываю SendKeys.Send("TestSample\n"); иногда он отправляет некоторые ключи дважды (например, TeestSample или TestSSSample) непредсказуемым образом. Это происходит примерно в 20% случаев.
Кроме того, когда я включаю пробел в строку SendKeys.Send("Test Sample\n"), это также непредсказуемо, за исключением одного момента. Каждый раз, когда я это делаю, он входит в тестовый образец, выполняет поиск в Google, но также прокручивает страницу результатов, так как я нажал пробел после ввода текста.
Кто-нибудь еще видел это поведение. Кажется, это не работает таким образом, когда блокнот находится в фокусе.
(В качестве иллюстрации приведен пример кода. Поместите его в форму с односекундным таймером, с определениями DllImport в верхней части класса.) Это приложение дает сбой примерно в 20 % случаев при работе с Google.com в Internet 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;