Элемент управления веб-браузера не получает клавиши Tab / Delete / Back при размещении внутри надстройки Outlook - PullRequest
2 голосов
/ 15 декабря 2010

Я создаю надстройку Outlook, которая предоставляет настраиваемую область задач. Из этой панели при некоторых действиях пользователя

  1. Я создаю новый UserControl (внутри которого есть элемент управления WebBrowser)
  2. Завладеть окном сообщений Outlook (используя Win API FindWindow ("rctrl_renwnd32" ...))
  3. Изменить размер окна сообщений до 0 ширины
  4. Установить родительский элемент моего UserControl в главное окно обозревателя Outlook (с помощью Win API User32.SetParent)
  5. Установить размер моего UserControl, чтобы он занимал место окна сообщений

Все хорошо, за исключением того, что Outlook жует клавиши Delete / Back / Tab (и я уверен, что их больше) от передачи к элементу управления.

Внутри этого UserControl я запускаю внутренний сайт, который требует от пользователя входа в систему. Веб-браузер принимает обычный ввод, но ничего не делает при нажатии клавиш Tab / Delete / Back!

Я в своем уме! Я искал в сети пару недель и, похоже, не знаю, что происходит.

Кто-нибудь знает, что здесь происходит и как это исправить? Я реализовал низкоуровневую клавиатуру и могу перехватывать нужные клавиши. Я пытался использовать User32.PostMessage, но все равно не повезло.

Спасибо, Harsha

p.s .: Я родом из Java, поэтому я немного новичок в .NET & P / Invoke.

1 Ответ

2 голосов
/ 15 декабря 2010

Элемент управления WebBrowser отвечает на сообщение WM_GETDLGCODE с помощью DLGC_WANTARROWS | DLGC_WANTCHARS. Вот почему он не обрабатывает определенные клавиши, такие как Tab, Back и Delete. Он сказал родителю не обрабатывать эти ключи.

Вы можете написать хук Windows, а затем вызвать реализацию IOleInPlaceActiveObject :: TranslateAccelerator элемента управления веб-браузера.

Дополнительные сведения см. В статье «Проблемы с нажатием клавиши WebBrowser», автор Scott Roberts, Microsoft Internet Developer, апрель 1999 г.

...