2013-10-08 5 views
0

Я работаю над концепцией, которая работает как скопировать &, но использует мой собственный алгоритм вместо использования буфера обмена.Получить выделенный текст из любого приложения с помощью другого приложения

У нас есть пользователи, которые используют множество различных программ, которые содержат номера деталей. Так будет работать моя концепция.

  1. Пользователь выделяет номер детали из любого приложения (Word, Excel, PDF, JDE, и т.д.)
  2. либо горячей клавиши или нажав на другое приложение, пользователь запускает свою процедуру.
  3. Моя процедура захватывает этот текст из исходного приложения и обрабатывает его соответствующим образом.

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

Что я не уверен в том, как получить выбранный текст из приложения, которое было активным до запуска моего кода? Нужно ли мне сначала заставить моего пользователя скопировать в буфер обмена, а затем запустить мое приложение или я могу создать свою собственную надстройку надстройки типа «копировать/вставить»?

Предпочтительный VB для этого, но может также использовать C++ или C#, если это проще.


Что касается вопроса, почему, поскольку мы хотим, чтобы действие было плавным для пользователя. Будет выполнено несколько действий за кулисами, а затем пользователю будет представлен браузер с соответствующей информацией, относящейся к этому номеру детали. В конечном счете, я не хочу, чтобы промежуточный экран всплывал, но скорее полностью скрывался от пользователя. Если я требую, чтобы они скопировали, а затем запустили мою программу, я добавлю еще один шаг к пути пользователя, который я надеюсь избежать.

Я немного искал контекст контекстного меню, но обнаружил, что каждая программа может иметь собственное переопределение. Мне не удалось найти способ глобально переопределить все контекстные меню контекстного меню, чтобы включить новое действие.

ответ

2

От this article:

var element = AutomationElement.FocusedElement; 

if (element != null) 
{ 
    object pattern; 
    if (element.TryGetCurrentPattern(TextPattern.Pattern, out pattern)) 
    { 
     var tp = (TextPattern) pattern; 
     var sb = new StringBuilder(); 

     foreach (var r in tp.GetSelection()) 
     { 
      sb.AppendLine(r.GetText(-1)); 
     } 

     var selectedText = sb.ToString(); 
    } 
} 

Это в C#, но это должно быть довольно тривиально перевести.

+0

Эта статья выглядит идеально! благодаря –

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