C# SendKeys.SendWait()不';I don’我不能在所有计算机上都始终如一地工作

C# SendKeys.SendWait()不';I don’我不能在所有计算机上都始终如一地工作,c#,.net,winforms,sendkeys,C#,.net,Winforms,Sendkeys,我正在使用SendKeys.SendWait()在窗口之间来回复制和粘贴文本。我已经编写了一个复制粘贴方法,它使用用户32.dll中的FindWindow和setforegroundindow方法 大多数情况下,在我的设备上,该方法都能完美工作。但是,在不同的设备上运行时,它非常不一致。所有设备都使用相同的操作系统,并且打开的应用程序大致相同 有时,该方法粘贴错误的文本(来自上一个副本),有时该方法根本不起作用 我已确保使用新的SendKeys.SendWait()实现,如中所述 我还尝试在复制

我正在使用SendKeys.SendWait()在窗口之间来回复制和粘贴文本。我已经编写了一个复制粘贴方法,它使用
用户32.dll中的
FindWindow
setforegroundindow
方法

大多数情况下,在我的设备上,该方法都能完美工作。但是,在不同的设备上运行时,它非常不一致。所有设备都使用相同的操作系统,并且打开的应用程序大致相同

有时,该方法粘贴错误的文本(来自上一个副本),有时该方法根本不起作用

我已确保使用新的
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类确实正确地传输了文本,但它似乎更不可靠。它经常抛出一个错误,表示“请求的剪贴板操作未成功。”

从任意窗口到另一个任意窗口?或者像MS Word这样的特殊窗口?@kennyzx其中一个窗口只是一个任意窗口(我通常用写字板测试)。另一个窗口是程序窗体本身。我一直在使用
FindWindow
根据名称查找windows句柄。Windows的命名在所有设备上都是一致的。对于程序本身,考虑使用类,它提供对系统剪贴板的直接访问,使用<代码>剪贴板。GETTEX/SETTEX/<代码>方法来替换Ctrl +C/CTRL+V,然后只需要使用<代码> SeNekKest</代码>来操作任意窗口。
SendKeys
确实是一种松散的方法,它不能保证每次都能成功操作,其结果受到许多因素的影响。我不会采用这种方法,除非程序“只是为了好玩”。@kennyzx使用Clipboard类实际上让事情变得更糟。复制和粘贴不太可靠。虽然它有时仍然可以工作,但它经常抛出一个请求的剪贴板操作未成功的错误。从任意窗口到另一个任意窗口?或者像MS Word这样的特殊窗口?@kennyzx其中一个窗口只是一个任意窗口(我通常用写字板测试)。另一个窗口是程序窗体本身。我一直在使用
FindWindow
根据名称查找windows句柄。Windows的命名在所有设备上都是一致的。对于程序本身,考虑使用类,它提供对系统剪贴板的直接访问,使用<代码>剪贴板。GETTEX/SETTEX/<代码>方法来替换Ctrl +C/CTRL+V,然后只需要使用<代码> SeNekKest</代码>来操作任意窗口。
SendKeys
确实是一种松散的方法,它不能保证每次都能成功操作,其结果受到许多因素的影响。我不会采用这种方法,除非程序“只是为了好玩”。@kennyzx使用Clipboard类实际上让事情变得更糟。复制和粘贴不太可靠。虽然有时它仍然可以工作,但它经常抛出一个请求的剪贴板操作未成功的错误。