Можно ли получить выделенный текст из любого окна, включая элементы автоматизации, не связанные с пользовательским интерфейсом?

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

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

Я помню какое-то время назад, приложение, которое вело себя как словарь, где вы могли наводить курсор мыши на текст в любом месте Windows и показывать всплывающую подсказку с определением. Может ли это быть достигнуто в C# & .NET?

Я использовал WinSpy для проверки содержимого окна, которое, кажется, не работает с UIA, и ApplicationId отображается как пустой или "". Я предполагаю, что этот конкретный элемент не поддерживается МСА. Я также заметил, когда я тестировал с Notepad++, что он использует Scintilla, который также, похоже, не работает с UIA.

Возможно, если бы кто-то мог показать надежный способ сделать это с помощью другого метода, я бы использовал гибридный подход к своему приложению. Используйте платформу UIA, и если это не даст результатов, то снова перейдет к другому методу.

1 ответ

Решение

Один из простых способов добиться этого - отправить CTRL + C код ключа для выбранных окон, то вы можете найти выделенный текст в буфер обмена. Это очень легко реализовать. Смотрите здесь для отправки ключей другим процессам и здесь, чтобы прочитать буфер обмена. Недостатком является то, что вы потеряете содержимое буфера обмена. Если вы ищете более твердое решение, проверьте этот вопрос.

Другие вопросы по тегам