Приведенный ниже код я скопирован с MSDN с небольшим количеством модификации:SendKeys проблема с .NET программы
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
DllImport("User32")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
int cnt = 0;
private void button1_Click(object sender, EventArgs e)
{
IntPtr calculatorHandle = FindWindow("Notepad", "Untitled - Notepad");
if (calculatorHandle == IntPtr.Zero)
{
MessageBox.Show("Calculator is not running.");
return;
}
SetForegroundWindow(calculatorHandle);
SendKeys.SendWait(cnt.ToString());
SendKeys.SendWait("{ENTER}");
cnt++;
SendKeys.Flush();
System.Threading.Thread.Sleep(1000);
}
Проблема заключается порядковый номер в блокноте не является непрерывно. Первый щелчок всегда показывает 0 (как и ожидалось). но из второго щелчка результат непредсказуем (но последовательность все еще в порядке, например, 3, 4, 5, 10, 14, 15, ....)
Если я нажимаю кнопку достаточно быстро, я смог получить результат в непрерывном порядке (0,1,2,3,4, ....), но иногда он производит более двух одинаковых чисел (например, 0,1,2,3,3,3,4, 5,6,6,6,7,8,9, ...)
Удалите вызов Sleep(), я не могу заставить его потерпеть неудачу, не уйдя. –