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

时间:2014-09-09 05:03:14

标签: c# winforms webbrowser-control mshtml

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

Internet Explorer为此提供了Internet Options->Content->Autocomplete->Use Autocomplete for Forms选项。启用此功能后,当您开始输入" a"在HTML元素中,它显示了以" a"开头的先前条目的列表。 (也许"苹果"和" 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的ICustomDoc.SetUIHandler(this as IDocHostUIHandler)方法中调用DocumentCompleted,以便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,但修改此密钥似乎没有任何效果。

我还能做些什么来让Autocomplete工作吗?感谢。

1 个答案:

答案 0 :(得分:1)

以下对我有用: (使用我的wordpress网址测试)

转到此stackoverflow线程并复制ImprovedBrowser答案:WebBrowser: Drag&Drop

然后将DocHostUIFLAG替换为: (原帖中的那个只有部分列表) 您可以在MSDN DOCHOSTUIFLAG Enumerated Type

上阅读标志值的说明
[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;
    }