如何在WebBrowser控件中为表单启用自动完成功能

本文关键字:启用 功能 成功 表单 WebBrowser 控件 | 更新日期: 2023-09-27 18:21:20

我一直在尝试为System.Windows.Forms.WebBrowser控件中的表单启用自动完成功能。

Internet Explorer提供了Internet Options->Content->Autocomplete->Use Autocomplete for Forms选项。启用此功能后,当您开始在HTML元素中键入"a"时,它会显示以前以"a"(可能是"apple"answers"android")开头的条目列表。我想在我的WebBrowser控件中使用相同的东西。

我在类中实现了IDocHostUIHandler,并使GetHostInfo设置了DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE标志,但该标志似乎没有任何作用。其他标志(如DOCHOSTUIFLAG.DOCHOSTUIFLAG_NO3DBORDER)按预期工作,所以我知道GetHostInfo正在被调用。

有些人报告通过设置这面旗帜取得了成功,而另一些人则没有:http://microsoft.public.inetsdk.programming.webbrowser-ctl.narkive.com/MSQ6nobe/can-t-get-autocomplete-to-work-in-hosted-webbrowser-control

http://www.44342.com/webbrowser-control-f125-t1436-p1.htm

我在WebBrowser的DocumentCompleted方法中调用ICustomDoc.SetUIHandler(this as IDocHostUIHandler),以便MSHTML调用IDocHostUIHandler接口方法。

我认为,确保我的应用程序正确读取注册表项HKCU'Software'Microsoft'Internet Explorer'Main'Use FormSuggest可能是相关的,也许可以按照其他人的建议实现IDocHostUIHandler.GetOptionKeyPathIDocHostUIHandler.GetOverrideKeyPath。我试着实现这些,但我没能让它们中的任何一个被调用。

我使用Process Monitor工具来检查我的应用程序正在查询哪些注册表项,而Use FormSuggest根本没有被查询。它试图查询HKCU'Software'Policies'Microsoft'Internet Explorer'Control Panel'FormSuggest,但修改此密钥似乎没有任何效果。

我还有什么可以做的吗?谢谢

如何在WebBrowser控件中为表单启用自动完成功能

以下对我有效:(使用我的wordpress url测试)

转到这个stackerflow线程并复制ImprovedBrowser答案:WebBrowser:Drag&丢弃

然后将DocHostUIFLAG替换为:(原帖只有部分列表)您可以在MSDN DOCHOSTUIFLAG枚举类型上阅读标志值的描述

[Flags]
public enum DOCHOSTUIFLAG
{
    DIALOG = 0x00000001,
    DISABLE_HELP_MENU = 0x00000002,
    NO3DBORDER = 0x00000004,
    SCROLL_NO = 0x00000008,
    DISABLE_SCRIPT_INACTIVE = 0x00000010,
    OPENNEWWIN = 0x00000020,
    DISABLE_OFFSCREEN = 0x00000040,
    FLAT_SCROLLBAR = 0x00000080,
    DIV_BLOCKDEFAULT = 0x00000100,
    ACTIVATE_CLIENTHIT_ONLY = 0x00000200,
    OVERRIDEBEHAVIORFACTORY = 0x00000400,
    CODEPAGELINKEDFONTS = 0x00000800,
    URL_ENCODING_DISABLE_UTF8 = 0x00001000,
    URL_ENCODING_ENABLE_UTF8 = 0x00002000,
    ENABLE_FORMS_AUTOCOMPLETE = 0x00004000,
    ENABLE_INPLACE_NAVIGATION = 0x00010000,
    IME_ENABLE_RECONVERSION = 0x00020000,
    THEME = 0x00040000,
    NOTHEME = 0x00080000,
    NOPICS = 0x00100000,
    NO3DOUTERBORDER = 0x00200000,
    DISABLE_EDIT_NS_FIXUP = 0x00400000,
    LOCAL_MACHINE_ACCESS_CHECK = 0x00800000,
    DISABLE_UNTRUSTEDPROTOCOL = 0x01000000,
    HOST_NAVIGATES = 0x02000000,
    ENABLE_REDIRECT_NOTIFICATION = 0x04000000,
    USE_WINDOWLESS_SELECTCONTROL = 0x08000000,
    USE_WINDOWED_SELECTCONTROL = 0x10000000,
    ENABLE_ACTIVEX_INACTIVATE_MODE = 0x20000000,
    DPI_AWARE = 0x40000000
}

然后将GetHostInfo更改为:

    int NativeMethods.IDocHostUIHandler.GetHostInfo(ref NativeMethods.DOCHOSTUIINFO info)
    {
        var ret = _baseIDocHostUIHandler.GetHostInfo(ref info);
        // must be done after because base.GetHostInfo(...) resets the flags
        info.dwFlags = info.dwFlags | (int) NativeMethods.DOCHOSTUIFLAG.ENABLE_FORMS_AUTOCOMPLETE;
        return ret;
    }