首页 > 解决方案 > SendKeys.SendWait() 不能在所有计算机上始终如一地工作

问题描述

我正在使用 SendKeys.SendWait() 在窗口之间来回复制和粘贴文本。我写了一个复制粘贴方法,它使用FindWindowSetForegroundWindow方法"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()正确的方法来解决这个问题?有没有不同的、更可靠的方法来做到这一点?我可以做些什么来提高其跨平台的可靠性?

编辑:
虽然剪贴板类确实可以正确传输文本,但它似乎更不可靠。它经常抛出一个错误,说“请求的剪贴板操作没有成功”。

标签: c#.netwinformssendkeys

解决方案


推荐阅读