C #, обнаружить выделенный текст на окнах? - PullRequest
3 голосов
/ 26 ноября 2009

Я бы сделал такие инструменты, как функция перевода панели инструментов Google, но это для рабочего стола. Что я хочу сделать, это выделите текст в любом приложении (word, pdf, live messenger и т. д.) и переведите его с помощью google translate api, вернувшись в качестве подсказки.

У меня есть поиск в msdn о мониторинге текста, я нашел только использование копирования и вставки и мониторинга буфера обмена, чтобы отметить событие.

так, есть идеи по этому поводу? спасибо.

Ответы [ 3 ]

3 голосов
/ 26 ноября 2009

Отправной точкой будет получение ссылки на текущее окно переднего плана. Код ниже получит текущее выбранное окно и заголовок этого окна:

[ DllImport("user32.dll") ]

static extern int GetForegroundWindow();

[ DllImport("user32.dll") ]
static extern int GetWindowText(int hWnd, StringBuilder text, int count); 

private void GetActiveWindow()
{

const int nChars = 256;
int handle = 0;
StringBuilder Buff = new StringBuilder(nChars);

   handle = GetForegroundWindow();

   if ( GetWindowText(handle, Buff, nChars) > 0 )
   {
   this.captionWindowLabel.Text = Buff.ToString();
   this.IDWindowLabel.Text = handle.ToString();
   }

}

Вы можете запустить этот код в таймере: т.е. дать пользователю 10 секунд, чтобы выбрать окно.

Я не уверен, как вы извлечете выделенный текст в окне, но я рассмотрю его для вас.

0 голосов
/ 26 ноября 2009

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

Говоря об этом, я не думаю, что это хорошая идея, так как вы могли бы в конечном итоге завершить работу другого процесса, заглянув под капот в отношении вызовов winapi, чтобы перехватить событие выделения текста, не говоря уже о том, что вы придется определить, есть ли у процесса какой-либо выбранный текст. Лучшее направление, которое я могу дать, это ... была написана статья о том, как шпионить за процессом на CodeProject здесь , это может быть шагом в правильном направлении, помните, что используемый код был для .NET 1.0 framework.

Надеюсь, это поможет и удачи в кодировании, С наилучшими пожеланиями, Том.

0 голосов
/ 26 ноября 2009

Я думаю, вам нужно начать с получения дескриптора любого окна, которое активируется, когда ваша программа активна. Полагаю, вам нужно заглянуть в InteropServices, чтобы сделать это.

Использование Windows API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...