我一直在尝试为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.GetOptionKeyPath
或IDocHostUIHandler.GetOverrideKeyPath
。我尝试实现这些,但我无法让它们中的任何一个被调用。
我使用Process Monitor工具检查应用程序正在查询的注册表项,并且根本没有查询Use FormSuggest
。它试图查询HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel\FormSuggest
,但修改此密钥似乎没有任何效果。
我还能做些什么来让Autocomplete工作吗?感谢。
答案 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;
}