有没有办法从其他程序复制文本而不选择它?

时间:2015-06-01 05:04:56

标签: c# api winapi sendmessage sendkeys

我想复制其他程序中的文字, 在这个程序中,Ctrl + a被认为是其他命令,我不能使用“SendKeys.SendWait(”^ a“);”选择文字。

有没有办法复制该文字?

2 个答案:

答案 0 :(得分:1)

您可以使用UIAComWrapper执行此操作,您需要处理该窗口(您尝试复制的位置)以及有关该元素的信息,您可以从UIAutomationVerify获取该信息。

var elementCollection = AutomationElement.FromHandle(windowHandle).FindAll(TreeScope.Subtree, Condition.TrueCondition);
foreach (var item in elementCollection)
{
   //check item properties if element is the one you looking for
}

此外,代替Condition.TrueCondition,您可以提供更复杂的过滤器,以便只获取该元素。

修改,添加了真实示例:

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
const string InternetExplorerClass = "IEFrame";
static void Main()
{
    var windowHandle = new IntPtr(0);

    //Find internet explorer instance
    windowHandle = FindWindow(InternetExplorerClass, null);

    if (!windowHandle.Equals(IntPtr.Zero))
    {
        //create filter to improve search speed
        var localizedControlType = new PropertyCondition(
            AutomationElement.LocalizedControlTypeProperty,
            "tab item");

        //get all elements in internet explorer that match our filter
        var elementCollection =
            AutomationElement.FromHandle(windowHandle)
                .FindAll(TreeScope.Subtree, localizedControlType);

        //iterate through search results
        foreach (AutomationElement item in elementCollection)
        {
            Console.WriteLine(item.Current.Name);
        }
    }
    else
    {
        Console.WriteLine("Internet explorer not found");
    }

    Console.ReadLine();
}

上面的代码将找到Internet Explorer,并将所有选项卡标题打印到控制台。我把源代码放到GitHub

答案 1 :(得分:0)

这是什么类型的编辑器,为什么你不能获得源文件?也许这会奏效:    1.将光标放在第一行的开头    2.按Ctrl + Shift + End    3. Ctrl + C

或者,您可以尝试通过Windows Input Simulator library

模拟键盘输入