2015-06-01 3 views
4

Я хочу скопировать текст из другой программы, в эту программу Ctrl + a рассматривается для другой команды, и я не могу использовать «SendKeys.SendWait («^a »); для выбора текста.Есть ли способ скопировать текст из другой программы без выбора?

Есть ли способ скопировать этот текст?

ответ

0

Какой редактор это и почему вы не можете просто получить исходный файл? Может быть, это будет работать: 1. Поместите курсор на начало первой строки 2. Нажмите Ctrl + Shift + End 3. Ctrl + C

В качестве альтернативы, вы можете попытаться имитировать ввод с клавиатуры через Windows Input Simulator library

+1

Благодарим вас за руководство. it className: AfxOleControl42. Ctrl + Shift + End не работает в этом приложении. Есть ли другой способ? –

+1

Уважаемый cyberj0g Я изучаю вашу идею. Спасибо за это. –

+1

Почему мой InputSimulator имеет только Equals и RefrenceEquals и не использует SimulateKeyDown или другие методы? –

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

Если вам нужна дополнительная информация об этой библиотеке, дайте мне знать, я использовал ее в нескольких проектах. – floatas

+1

Не могли бы вы рассказать мне больше? Как его использовать? –

Смежные вопросы