Я пробовал несколько вещей здесь.
Почему я хочу знать текст в точке. Я создаю пользовательские подсказки в офис. Когда мышь наводится над точкой (с помощью функции winapi TrackMouseEvent), я получаю из Windows точку, где находится мышь. Затем мне нужно узнать в Outlook (Explorer/Inspector), что за мыши.
First Thought - Outlook и Word Object Model only. Как вы можете видеть в этом вопросе, моя первая мысль заключалась в том, чтобы использовать тот же объект Window, который вы можете использовать в Word и реализовать метод RangeFromPoint. Но MS решила не поддерживать это в Outlook. Так что это тупик.
Второй вариант здесь должен был использовать один или оба из этих
Selection.Information(Word.WdInformation.wdHorizontalPositionRelativeToPage)
Selection.Information(Word.WdInformation.wdVerticalPositionRelativeToPage)
и/или
Selection.Information(Word.WdInformation.wdHorizontalPositionRelativeToTextBoundary)
Selection.Information(Word.WdInformation.wdVerticalPositionRelativeToTextBoundary)
Вертикальная относительно страницы всегда возвращается -1, даже если текст был явно в поле зрения. Относительно текстовой границы возвращались числа, и они менялись с позициями, но я не работал, где была граница, когда в Outlook Inspector. Поля не помогли мне. Это может быть способ сделать это, но я не работал.
IUIAutomation или автоматизации У меня нет опыта с этим однако мои попытки получить в Textpattern не удалось в Outlook 2007 и Outlook 2010.Я называю эти версии, потому что здесь я задавал вопросы о том, что они были успешными с 2013 года. Я думаю, что MS в то время намеренно пыталась скрыть тело письма, чтобы остановить ummm, замедлить электронные вирусы.
WinApi Текст Тело письма в окне Class _WwG и содержимое окна не видно. Вы получаете «сообщение» в качестве текста. Похоже, здесь МС сделал это намеренно. Таким образом, попытка получить текст в позиции не сработает.
Сочетание WinAPI и Word, Object Model Решение, которое я нашел, который работает с чтением панелей Explorer, а также со всеми инспекторами, чтобы использовать комбинацию WinApi и Word.
- Получить событие мыши парения с точки в окне (_WwG класс для Outlook)
- Использование SendMessage и отправить messsage в это окно с флагом WM_LBUTTONDOWN.
- Получите документ Word из метода Inspector.WordEditor.
- Текущий выбранный диапазон будет содержать мышь в тексте.
- Расширьте диапазон до слова или что вам нужно, и теперь у вас есть то, что находится под мышкой.
Для окон только для чтения в Outlook нет заметки для пользователя, но она все еще существует и может быть найдена и использована.
Я не реализовал это на элементах Outlook, которые создаются (курсор используется и видим), но я полагаю, что мне нужно будет переместить выделение в положение мыши, а затем переместить его, чтобы иметь возможность реализовать его , Я мог представить, что это не лучшее для некоторых пользователей.
Редактировать Существует одна проблема с этим, которую я не мог решить. Отправляя клик к окну, вы нажимаете на то, что в данный момент. Если есть гиперссылка, которая имеет место с адресами электронной почты в mailItem, то она следует за гиперссылкой. Я не мог нормально обойти эту проблему. Единственное, что я нашел в WinProc, было то, что когда мышь над гиперссылкой, Outlook показывает всплывающую подсказку, и есть сообщение WM_USER + 2. Прослушайте это сообщение и не нажимайте, если это сообщение получено.