C# Webbrowser控件放置在Outlook加载项中时不接收Tab/Delete/Back键

C# Webbrowser控件放置在Outlook加载项中时不接收Tab/Delete/Back键,c#,webbrowser-control,outlook-addin,C#,Webbrowser Control,Outlook Addin,我正在构建一个Outlook加载项,它公开一个自定义任务窗格。在此窗格中,查看一些用户操作 我创建了一个新的UserControl(其中包含一个WebBrowser控件) 获取Outlook消息窗口(使用Win API FindWindow(“rctrl_renwnd32”…) 将消息窗口的宽度调整为0 将my UserControl的父级设置为Outlook资源管理器主窗口(使用Win API User32.SetParent) 设置my UserControl的大小以占据messages窗口

我正在构建一个Outlook加载项,它公开一个自定义任务窗格。在此窗格中,查看一些用户操作

  • 我创建了一个新的UserControl(其中包含一个WebBrowser控件)
  • 获取Outlook消息窗口(使用Win API FindWindow(“rctrl_renwnd32”…)
  • 将消息窗口的宽度调整为0
  • 将my UserControl的父级设置为Outlook资源管理器主窗口(使用Win API User32.SetParent)
  • 设置my UserControl的大小以占据messages窗口的位置
  • 一切都很好,除了Outlook将Delete/Back/Tab键(我相信还有更多键)从传递到控件上的过程中逐渐消磨掉

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

    我真是束手无策!我已经在网上搜索了几个星期了,似乎不知道发生了什么

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

    谢谢, 哈沙


    p、 s:我有Java背景,所以在.NET&p/Invoke方面我算是个新手。

    WebBrowser控件用DLGC_WANTARROWS | DLGC_WANTCHARS响应WM_GETDLGCODE消息。这就是为什么它不能处理某些键,比如Tab、Back和Delete。它告诉家长不要处理那些钥匙

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


    查看1999年4月微软互联网开发人员斯科特·罗伯茨的“网络浏览器击键问题”,了解更多详细信息。

    Hi Sheng,我将对此进行进一步调查。我曾尝试过设置我自己的消息循环的早期选项,但也不太管用。将在未来几周内确认该问题。非常感谢您的回复。