SendKeys.SendWait () не работает согласованно на всех компьютерах - PullRequest
0 голосов
/ 10 февраля 2019

Я использую SendKeys.SendWait () для копирования и вставки текста назад и вперед между окнами.Я написал метод копирования-вставки, который использует методы FindWindow и SetForegroundWindow из "User32.dll"

В большинстве случаев на моем устройстве этот метод работает отлично.Однако это очень противоречиво при работе на разных устройствах.Все устройства используют одну и ту же операционную систему и открывают примерно одинаковые приложения.

Иногда метод вставляет неверный текст (из предыдущей копии), а иногда метод просто не работает вообще.

Я убедился, что использую новую реализацию SendKeys.SendWait(), как описано в документации .

Я также попытался поместить функцию сна между копиейи вставьте функции.Похоже, это не влияет на вывод, кроме как сделать его медленнее.Даже во время сна программа копирует и вставляет непоследовательно.

public static bool CopyPaste(string startWindow, string endWindow, int delay = 0)
{
    int startWindowID = FindWindow(null, startWindow);
    int endWindowID = FindWindow(null, endWindow);

    SetForegroundWindow(startWindowID);

    SendKeys.SendWait("^{a}");
    SendKeys.SendWait("^{c}");

    Thread.Sleep(delay);

    SetForegroundWindow(endWindowID);

    SendKeys.SendWait("^{a}");
    SendKeys.SendWait("^{v}");
}

Я знаю, что копирование и вставка в другие окна и вставка их в другое окно очень удобны и не очень хорошая идея, но у меня нет другого выбора.

Правильно ли использовать SendKeys.SendWait()?Есть ли другой, более надежный способ сделать это?Что я могу сделать, чтобы повысить его надежность на разных платформах?

Редактировать:
Хотя класс Clipboard правильно передает текст, он кажется еще менее надежным.Часто выдается сообщение о том, что «Запрошенная операция буфера обмена не выполнена».

...