我正在构建一个公开自定义任务 Pane 的 Outlook 加载项。从此 Pane 开始执行某些用户操作,
- 我创建了一个新的 UserControl(其中有一个 WebBrowser 控件)
- 获取 Outlook 消息窗口(使用 Win API FindWindow("rctrl_renwnd32"...) )
- 将消息窗口调整为 0 宽度
- 将我的 UserControl 的父级设置为主 Outlook 资源管理器窗口(使用 Win API User32.SetParent)
- 设置我的 UserControl 的大小以占据消息窗口的位置
一切都很好,除了 Outlook 将 Delete/Back/Tab 键(我确信还有更多)从传递到控件中剔除这一事实。
在此 UserControl 中,我启动了一个要求用户执行登录的内部站点。 WebBrowser 接受常规输入,但在按下 Tab/Delete/Back 键时不执行任何操作!
我已经无计可施了!我已经在网上搜索了几个星期,但似乎不知道发生了什么。
有人知道这里发生了什么以及如何解决它吗?我已经实现了一个低级键盘钩子(Hook)并且能够捕获所需的键。我试过使用 User32.PostMessage 但还是不行。
谢谢, 戒日
p.s.:我有 Java 背景,所以在 .NET 和 P/Invoke 方面我是新手。
最佳答案
WebBrowser 控件用 DLGC_WANTARROWS | 响应 WM_GETDLGCODE 消息DLGC_WANTCHARS。这就是为什么它不会处理某些键,例如 Tab、Back 和 Delete。它告诉 parent 不要处理这些 key 。
您可以编写一个 Windows Hook ,然后调用 Web 浏览器控件的 IOleInPlaceActiveObject::TranslateAccelerator 实现。
查看 Microsoft Internet 开发人员 Scott Roberts 于 1999 年 4 月撰写的“WebBrowser Keystroke Problems”以了解更多详细信息。
关于c# - Webbrowser 控件在放置在 Outlook 加载项中时不接收 Tab/Delete/Back 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4449963/