放置在Outlook加载项内时,Web浏览器控件不接收Tab / Delete / Back键

时间:2010-12-15 12:41:04

标签: c# webbrowser-control outlook-addin

我正在构建一个暴露自定义任务窗格的Outlook加载项。在此窗格中执行一些用户操作,

  1. 我创建了一个新的UserControl(其中包含一个WebBrowser控件)
  2. 抓住Outlook消息窗口(使用Win API FindWindow(“rctrl_renwnd32”...))
  3. 将消息窗口的大小调整为0宽度
  4. 将UserControl的父级设置为主Outlook资源管理器窗口(使用Win API User32.SetParent)
  5. 将UserControl的大小设置为占据消息窗口的位置
  6. 一切都很好,除了Outlook剔除Delete / Back / Tab键(并且我确定还有更多),从被传递到控件。

    在此UserControl中,我启动了一个内部站点,要求用户执行登录。 WebBrowser接受常规输入,但在按下Tab / Delete / Back键时不执行任何操作!

    我在我的智慧结束!我一直在网上搜索几个星期,似乎不知道发生了什么。

    有谁知道这里发生了什么以及如何解决?我已经实现了一个低级键盘钩子,并能够捕获所需的键。我尝试过使用User32.PostMessage,但仍然没有运气。

    谢谢, 戒日

    p.s:我来自Java背景,所以当谈到.NET& S时,我有点新手。 P /调用。

1 个答案:

答案 0 :(得分:2)

WebBrowser控件使用DLGC_WANTARROWS响应WM_GETDLGCODE消息。 DLGC_WANTCHARS。这就是为什么它不会处理某些键,如Tab,Back和Delete。它告诉父母不要处理这些钥匙。

你可以编写一个Windows钩子,然后调用webbrowser控件的IOleInPlaceActiveObject :: TranslateAccelerator实现。

查看1999年4月微软互联网开发人员Scott Roberts的“WebBrowser击键问题”,了解更多详情。